机器学习: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科学计算领域的"瑞士军刀",它:

  1. 让代码更简洁:一行顶十行
  2. 计算速度飞快:底层用C实现
  3. 生态丰富:几乎所有科学计算库都基于它

无论是数据清洗、特征工程还是模型训练,NumPy都是不可或缺的工具。掌握NumPy,你就打开了Python数据科学的大门!

小提示:在实际项目中,可以结合Pandas进行数据操作,再用NumPy进行数值计算,两者配合使用效果更佳。

posted @ 2025-04-07 15:50  看盘鸭  阅读(69)  评论(0)    收藏  举报