numpy指南

NumPy指南

零、目录&思维导图

[TOC]

numpy

一、基础导入

  • 导入NumPy库(import numpy as np)
    1
    import numpy as np

二、数组(ndarrays)

2.1 数组创建

  • 从列表创建数组(np.array())
    1
    arr = np.array([1, 2, 3])
  • 等差数组(np.arange())
    1
    arr = np.arange(0, 10, 2)  # 生成[0,2,4,6,8]
  • 等间隔数组(np.linspace())
    1
    arr = np.linspace(0, 1, 5)  # 生成5个0到1之间的等间隔数
  • 全零数组(np.zeros())
    1
    arr = np.zeros((2, 3))  # 2行3列的全零数组
  • 全一数组(np.ones())
    1
    arr = np.ones((3, 3))  # 3行3列的全一数组
  • 0-1随机数组(np.random.rand())
    1
    arr = np.random.rand(2, 2)  # 2行2列的随机数组

2.2 数组属性

  • 维度数(ndim)
    1
    arr.ndim  # 返回数组的维度数量
  • 形状(shape)
    1
    arr.shape  # 返回(行数, 列数)
  • 元素总数(size)
    1
    arr.size  # 返回数组中所有元素的个数
  • 数据类型(dtype)
    1
    arr.dtype  # 返回数组元素的数据类型

三、索引与切片(Indexing & Slicing)

3.1 一维数组

  • 单个元素索引
    1
    arr[1]  # 获取索引为1的元素
  • 区间切片(左闭右开)
    1
    arr[2:5]  # 获取索引2到4的元素
  • 从指定位置到末尾
    1
    arr[3:]  # 获取索引3及以后的所有元素
  • 从开头到指定位置
    1
    arr[:2]  # 获取索引0和1的元素

3.2 二维数组

  • 单个元素索引
    1
    arr[row, col]  # 获取第row行第col列的元素
  • 行+列切片
    1
    arr[1:3, :2]  # 获取第1-2行,第0-1列的子数组

3.3 布尔掩码(Boolean Masking)

  • 创建布尔掩码
    1
    mask = arr > 5  # 生成与arr形状相同的布尔数组
  • 掩码索引
    1
    arr[mask]  # 返回所有满足条件的元素

四、数学运算(Mathematical Operations)

4.1 逐元素运算(Element-wise)

  • 加法
    1
    arr1 + arr2
  • 乘法
    1
    arr1 * arr2
  • 减法
    1
    arr1 - arr2
  • 除法
    1
    arr1 / arr2

4.2 统计运算

  • 均值(np.mean())
    1
    np.mean(arr)
  • 求和(np.sum())
    1
    2
    3
    np.sum(arr)
    np.sum(arr, axis=0) # 按列求和
    np.sum(arr, axis=1) # 按行求和
  • 最大值(np.max())
    1
    np.max(arr)
  • 最小值(np.min())
    1
    np.min(arr)
  • 标准差(np.std())
    1
    np.std(arr)

4.3 点积(Dot Product)

  • 点积函数(np.dot())
    1
    np.dot(a, b)
  • 矩阵乘法运算符(@)
    1
    a @ b

五、广播(Broadcasting)

规则:从右对齐形状,维度匹配或其中一个维度为1时自动扩展

1
2
3
arr1 = np.ones((3, 3))  # 形状(3,3)
arr2 = np.array([1, 2, 3]) # 形状(3,)
result = arr1 + arr2 # arr2自动扩展为(3,3)后相加

六、函数与工具(Functions & Utilities)

6.1 数组重塑

  • 重塑形状(reshape())
    1
    arr.reshape(2, 3)  # 将数组重塑为2行3列
  • 展平数组(flatten())
    1
    arr.flatten()  # 将多维数组转为一维数组

6.2 数组拼接

  • 通用拼接(np.concatenate())
    1
    np.concatenate((a, b), axis=0)  # 垂直拼接
  • 垂直堆叠(np.vstack())
    1
    np.vstack((a, b))  # 按行垂直堆叠
  • 水平堆叠(np.hstack())
    1
    np.hstack((a, b))  # 按列水平堆叠
一、np.concatenate(axis=0) 上下拼(通用)

axis=0 → 沿着行方向拼接,行数变多。

例1:二维数组上下拼

1
2
3
4
5
6
7
8
a = np.array([[1, 2],
[3, 4]])

b = np.array([[5, 6],
[7, 8]])

c = np.concatenate((a, b), axis=0)
print(c)

结果:

1
2
3
4
[[1 2]
[3 4]
[5 6]
[7 8]]

形状:(2,2) + (2,2) → (4,2)

例2:三个数组一起上下拼

1
2
3
4
5
6
a = np.array([[0]])
b = np.array([[1]])
c = np.array([[2]])

res = np.concatenate((a, b, c), axis=0)
print(res)

结果:

1
2
3
[[0]
[1]
[2]]

二、np.concatenate(axis=1) 左右拼(通用)

axis=1 → 沿着列方向拼接,列数变多。

1
2
3
4
5
6
7
8
a = np.array([[1, 2],
[3, 4]])

b = np.array([[5, 6],
[7, 8]])

c = np.concatenate((a, b), axis=1)
print(c)

结果:

1
2
[[1 2 5 6]
[3 4 7 8]]

形状:(2,2) + (2,2) → (2,4)


三、np.vstack 垂直堆叠(上下拼,专用)

v = vertical(垂直)
效果和 concatenate(axis=0) 完全一样。

例1:二维上下堆叠

1
2
3
4
a = np.array([[1, 2], [3, 4]])
b = np.array([[9, 9], [9, 9]])

print(np.vstack((a, b)))

结果:

1
2
3
4
[[1 2]
[3 4]
[9 9]
[9 9]]

例2:一维数组用 vstack

一维数组会自动变成二维行向量再拼接:

1
2
3
4
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

print(np.vstack((x, y)))

结果:

1
2
[[1 2 3]
[4 5 6]]

四、np.hstack 水平堆叠(左右拼,专用)

h = horizontal(水平)
效果和 concatenate(axis=1) 一样。

例1:二维左右拼

1
2
3
4
5
6
a = np.array([[1],
[2]])
b = np.array([[9],
[9]])

print(np.hstack((a, b)))

结果:

1
2
[[1 9]
[2 9]]

例2:一维数组左右拼

一维直接接成更长一维:

1
2
3
4
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

print(np.hstack((x, y)))

结果:

1
[1 2 3 4 5 6]

6.3 数组转置

  • 转置属性(.T)
    1
    arr.T
  • 转置函数(np.transpose())
    1
    np.transpose(arr)

七、文件输入输出(File I/O)

7.1 .npy二进制文件

  • 保存数组(np.save())
    1
    np.save('file.npy', arr)
  • 加载数组(np.load())
    1
    arr = np.load('file.npy')

7.2 文本文件

  • 保存文本文件(np.savetxt())
    1
    np.savetxt('file.txt', arr)
  • 加载文本文件(np.loadtxt())
    1
    arr = np.loadtxt('file.txt')

高阶语法(图中未出现)

  • 数据类型转换(astype())
    1
    arr.astype(np.float32)  # 将数组转为float32类型
  • 条件运算(np.where())
    1
    np.where(arr > 5, 1, 0)  # 满足条件为1,否则为0
  • 数组排序(np.sort())
    1
    np.sort(arr)  # 返回排序后的数组
  • 唯一值提取(np.unique())
    1
    np.unique(arr)  # 返回数组中的唯一元素
  • 最大值索引(np.argmax())
    1
    np.argmax(arr)  # 返回最大值的索引
  • 数组复制(copy())
    1
    arr_copy = arr.copy()  # 创建数组的深拷贝
  • 花式索引
    1
    arr[[0, 2, 4]]  # 获取索引为0、2、4的元素
  • 标准正态分布随机数(np.random.randn())
    1
    np.random.randn(3, 3)  # 生成3行3列的标准正态分布随机数