机器学习:Numpy
NumPy:让Python计算飞起来的科学计算库
简介:为什么需要NumPy?
想象一下,如果你要计算1000个学生的成绩总和,用Python的列表可能需要写循环,而用NumPy只需要一行代码。NumPy(Numerical Python)就是这样一个让数值计算变得简单高效的Python库。
作为Python科学计算的基石,NumPy提供了:
- 闪电般快速的多维数组(ndarray)
- 丰富的数学运算功能
- 高效的矩阵计算能力
几乎所有主流的数据科学和机器学习库(如Pandas、SciPy、Scikit-learn等)都建立在NumPy之上。可以说,掌握NumPy是进入Python数据科学领域的第一步。
安装:一分钟搞定
安装NumPy简单得就像叫外卖:
pip install numpy # 使用pip
# 或者
conda install numpy # 使用conda
基础用法:从零开始
创建数组:多种姿势任你选
NumPy的核心是ndarray(n维数组),创建方式多种多样:
import numpy as np
# 创建空数组(注意:内容是随机的!)
empty_arr = np.empty((3, 4)) # 3行4列的空数组
# 创建全0数组
zeros_arr = np.zeros((3, 4)) # 3行4列的0数组
# 创建全1数组
ones_arr = np.ones((3, 4)) # 3行4列的1数组
# 从Python列表创建
list_arr = np.array([[1, 2, 3], [4, 5, 6]]) # 2维数组
# 类似Excel的自动填充
range_arr = np.arange(0, 10, 2) # 0到10,步长2 → [0,2,4,6,8]
linspace_arr = np.linspace(1, 10, 7) # 1到10的7个等距数
数组操作:像切蛋糕一样简单
NumPy的索引和切片操作非常直观:
arr = np.array([[1, 2], [3, 4], [5, 6]])
# 获取单个元素
print(arr[1, 0]) # 第2行第1列 → 3
# 切片操作
print(arr[:2, :2]) # 前两行的前两列 → [[1,2],[3,4]]
# 布尔索引:筛选符合条件的元素
print(arr[arr > 3]) # 所有大于3的元素 → [4,5,6]
数组运算:告别for循环
NumPy的运算既直观又高效:
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
# 向量加法
print(x + y) # [5,7,9]
# 点积(内积)
print(np.dot(x, y)) # 1*4 + 2*5 + 3*6 = 32
# 广播机制:自动扩展维度
print(x + 10) # [11,12,13]
广播机制:NumPy的"智能"特性
广播机制让不同形状的数组也能运算:
# 标量与数组
print(np.array([1, 2, 3]) + 5) # [6,7,8]
# 不同形状数组
matrix = np.array([[1, 2, 3], [4, 5, 6]]) # 2x3
vector = np.array([10, 20, 30]) # 3
print(matrix + vector) # [[11,22,33],[14,25,36]]
常用函数:数据分析利器
NumPy提供了丰富的数据处理函数:
data = np.array([1, 2, 3, 4, 5])
# 统计函数
print(np.mean(data)) # 平均值 → 3.0
print(np.std(data)) # 标准差 → 1.414...
# 数组变形
arr = np.arange(6).reshape(2, 3) # 1维变2维
# 数组拼接
a = np.array([1, 2])
b = np.array([3, 4])
print(np.concatenate([a, b])) # [1,2,3,4]
# 去重
print(np.unique([1,1,2,2,3])) # [1,2,3]
机器学习实战应用
数据预处理:标准化与归一化
# 生成100个样本,每个样本3个特征
data = np.random.rand(100, 3)
# Z-score标准化(均值0,标准差1)
mean = np.mean(data, axis=0)
std = np.std(data, axis=0)
normalized = (data - mean) / std
# Min-Max归一化(0到1之间)
scaled = (data - np.min(data)) / (np.max(data) - np.min(data))
矩阵计算:速度对比
NumPy比纯Python快多少?看这个例子:
import time
# 创建两个100x100矩阵
x = np.random.rand(100, 100)
y = np.random.rand(100, 100)
# NumPy实现:闪电速度
start = time.time()
z = np.dot(x, y)
print(f"NumPy耗时:{time.time()-start:.6f}秒")
# Python原生实现:龟速
start = time.time()
z_slow = np.zeros((100, 100))
for i in range(100):
for j in range(100):
for k in range(100):
z_slow[i,j] += x[i,k] * y[k,j]
print(f"原生Python耗时:{time.time()-start:.6f}秒")
在我的电脑上测试,NumPy比纯Python快了500多倍!
与Scikit-learn无缝集成
from sklearn.linear_model import LinearRegression
# 生成模拟数据
X = np.random.rand(100, 2) # 100个样本,2个特征
y = 3*X[:,0] + 5*X[:,1] + np.random.normal(0, 0.1, 100) # 线性关系+噪声
# 训练模型
model = LinearRegression()
model.fit(X, y)
# 预测新数据
new_data = np.array([[0.5, 0.8]])
print(model.predict(new_data)) # 预期≈3*0.5 + 5*0.8 = 5.5
结语:NumPy的强大之处
NumPy就像Python科学计算领域的"瑞士军刀",它:
- 让代码更简洁:一行顶十行
- 计算速度飞快:底层用C实现
- 生态丰富:几乎所有科学计算库都基于它
无论是数据清洗、特征工程还是模型训练,NumPy都是不可或缺的工具。掌握NumPy,你就打开了Python数据科学的大门!
小提示:在实际项目中,可以结合Pandas进行数据操作,再用NumPy进行数值计算,两者配合使用效果更佳。

浙公网安备 33010602011771号