NumPy原理与用法详解

NumPy(Numerical Python)是 Python 中用于科学计算的核心库,其核心是 多维数组对象 ndarray。它通过高效的内存管理和矢量化运算,大幅提升了数值计算的速度。


核心原理
  1. ndarray 对象
    • 存储同类型数据的多维数组,内存连续分配,支持高效访问。
    • 相比 Python 列表,避免了类型检查和循环开销,计算速度提升 10-100 倍。
  2. 矢量化操作
    • 使用预编译的 C 代码对数组整体操作(如 a + b),避免显式循环。
    • 支持广播机制,允许不同形状数组进行运算(如标量与数组相加)。
  3. 内存优化
    • 数据在内存中连续存储,支持 CPU 缓存友好访问。
    • 提供多种数据类型(如 int32, float64),精确控制内存占用。

基础用法
import numpy as np

# 1. 创建数组
a = np.array([1, 2, 3])          # 一维数组
b = np.array([[1, 2], [3, 4]])    # 二维数组
c = np.zeros((3, 3))              # 全0数组
d = np.arange(0, 10, 2)           # 类似 range: [0 2 4 6 8]

# 2. 数组属性
print(a.shape)   # (3,)        → 形状
print(b.dtype)   # int64       → 数据类型
print(b.ndim)    # 2           → 维度数

# 3. 索引与切片
print(b[1, 0])    # 3         → 第二行第一列
print(b[:, 1])    # [2, 4]    → 所有行的第二列

# 4. 形状操作
e = np.array([[1, 2], [3, 4], [5, 6]])
f = e.reshape(2, 3)   # 改为 2x3 形状
g = e.flatten()        # 展平为一维数组 → [1 2 3 4 5 6]

数学与统计操作
# 1. 基本运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)   # [5 7 9]       → 逐元素相加
print(a * 2)   # [2 4 6]       → 标量广播

# 2. 矩阵乘法
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])
print(np.dot(matrix_a, matrix_b))  # [[19 22], [43 50]]

# 3. 统计函数
data = np.array([1, 2, 3, 4, 5])
print(np.mean(data))    # 3.0    → 均值
print(np.max(data))     # 5       → 最大值
print(np.std(data))     # 1.414  → 标准差

# 4. 随机数生成
random_arr = np.random.rand(3, 2)  # 生成 3x2 的随机数组(0-1之间)

广播机制示例
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b)  # [[11 22], [13 24]] → b 被广播为 [[10,20], [10,20]]

实际应用场景

示例1:数据归一化

data = np.random.randint(0, 100, size=(5, 5))
normalized = (data - np.min(data)) / (np.max(data) - np.min(data))

示例2:图像处理(RGB转灰度)

# 假设 image 是形状为 (height, width, 3) 的 RGB 图像数组
gray_image = np.dot(image, [0.299, 0.587, 0.114])

性能优化技巧
  1. 避免循环:尽量使用矢量化操作(如 np.sum() 替代 for 循环求和)。
  2. 视图与拷贝:切片返回视图(不复制数据),copy() 方法显式复制。
  3. 内存预分配:提前用 np.empty()np.zeros() 分配数组。

总结

NumPy 的核心是通过 ndarray 实现高效数值计算,适用于大规模数据处理、矩阵运算和科学计算。掌握其广播机制、矢量化操作和常用函数(如 reshape, dot, mean)是高效使用 NumPy 的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值