- 第 104 篇 -
Date: 2025 - 06 - 05
Author: 郑龙浩/仟墨
NumPy 函数与方法全集
文章目录
- NumPy 函数与方法全集
- 1. 数组创建与初始化
- 基础创建
- 序列生成
- 特殊数组
- 2. 数组操作
- 形状操作
- 合并与分割
- 3. 数学运算
- 基础运算
- 统计运算
- 4. 随机数生成
- 基础随机
- 分布函数
- 5. 文件IO
- 文件读写
1. 数组创建与初始化
基础创建
创建数组
-
np.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
将Python序列转换为ndarray数组,默认创建副本
dtype
:指定数组数据类型copy
:是否创建副本(默认为True)ndmin
:指定最小维度数
np.array([1, 2, 3]) # 一维数组
np.array([[1, 2], [3, 4]]) # 二维数组
np.array([1, 2, 3], dtype=float) # 指定float类型
-
np.asarray(a, dtype=None, order=None)
将输入转换为数组,如果输入已经是数组且满足要求则不创建副本
- 比
np.array
更高效,适合确保输入为数组的场景
- 比
arr = np.array([1, 2, 3])
np.asarray(arr) is arr # True,不创建副本
np.asarray([1, 2, 3]) # 转换列表为数组
序列生成
生成数值序列
-
np.arange([start,] stop, [step,], dtype=None)
创建等差序列数组
start
:起始值(默认为0)stop
:结束值(不包含)step
:步长(默认为1)
np.arange(5) # [0, 1, 2, 3, 4]
np.arange(1, 10, 2) # [1, 3, 5, 7, 9]
np.arange(0, 1, 0.1) # [0.0, 0.1, ..., 0.9]
np.arange(, 10, 2) # [0, 2, 4, 6, 8]
-
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
创建等间隔数列
num
:生成样本数endpoint
:是否包含结束值retstep
:是否返回步长
np.linspace(0, 1, 5) # [0.0, 0.25, 0.5, 0.75, 1.0]
np.linspace(0, 1, 5, endpoint=False) # [0.0, 0.2, 0.4, 0.6, 0.8]
特殊数组
创建特殊值数组
-
np.zeros(shape, dtype=float, order='C')
创建全0数组
shape
:数组形状(整数或元组)type=float
:默认为float
,可以设置其他类型,如int
order='C'
表示数组按 行优先 存储,order='F'
列优先 –> 了解即可
np.zeros(3) # [0., 0., 0.]
np.zeros((2, 3)) # 2行3列全0数组
np.zeros((2, 3), dtype=int) # 整数型全0数组
-
np.ones(shape, dtype=None, order='C')
创建全1数组
- 当
dtype=None
时,NumPy 会使用浮点数类型float64
作为默认类型
- 当
np.ones(4) # [1., 1., 1., 1.]
np.ones((2, 2), dtype=bool) # [[True, True], [True, True]]
-
np.empty(shape, dtype=float, order='C')
创建未初始化数组
- 内容为内存中的随机值,比zeros更快
np.empty(3) # 内容不确定
np.empty((2, 2)) # 2x2未初始化数组
2. 数组操作
形状操作
改变数组形状
-
ndarray.reshape(shape, order='C')
返回新形状数组,不改变原数据
-
shape
:新形状,可以使用-1自动计算维度其中,如果列数为
-1
,则表示自动计算列数 -
order
:'C’按行,'F’按列
-
arr = np.arange(1, 7) #[1, 2, 3, 4, 5, 6]
arr.reshape(2, 3) # [[1, 2, 3], [4, 5, 6]]
arr.reshape(3, -1) # 自动计算列数
arr.reshape(3, -1, order='C') # order='C',可写可不写
-
ndarray.resize(new_shape, refcheck=True)
原地修改数组形状
- 与reshape不同,会直接修改原数组
- 新数组大于原数组时填充0,小于则截断
arr = np.array([1, 2, 3])
arr.resize(2, 2) # [[1, 2], [3, 0]]
合并与分割
数组组合操作
-
np.concatenate((a1, a2, ...), axis=0, out=None)
沿现有轴连接数组序列
axis
:连接的轴向(0为行,1为列) –> 0为第一个轴(垂直方向),1为第二个轴(水平方向)
a = np.array([[1, 2],[3, 4]])
b = np.array([[5, 6],[7, 8]])
print(f'a尺寸:{a.shape}, b尺寸:{b.shape}')
print(np.concatenate((a, b))) # [1, 2, 3, 4]
arr1 = np.concatenate((a, b), axis=0) # 按列拼接
print(f'按行拼接:\n{arr1}\n数组尺寸:{arr1.shape}\n')
arr2 = np.concatenate((a, b), axis=1) # 按行拼接
print(f'按列拼接:\n{arr2}\n数组尺寸:{arr2.shape}')#打印结果a尺寸:(2, 2), b尺寸:(2, 2)
[[1 2][3 4][5 6][7 8]]
按行拼接:
[[1 2][3 4][5 6][7 8]]
数组尺寸:(4, 2)按列拼接:
[[1 2 5 6][3 4 7 8]]
数组尺寸:(2, 4)
a尺寸:(2, 2), b尺寸:(2, 2)
[[1 2][3 4][5 6][7 8]]
按行拼接:
[[1 2][3 4][5 6][7 8]]
数组尺寸:(4, 2)按列拼接:
[[1 2 5 6][3 4 7 8]]
数组尺寸:(2, 4)
-
np.vstack(tup)
/np.hstack(tup)
垂直/水平堆叠数组
np.vstack((a, b)) # [[1, 2], [3, 4]]
np.hstack((a, b)) # [1, 2, 3, 4]
3. 数学运算
基础运算
基本数学运算
-
np.add(x1, x2, /, out=None, *, where=True)
数组元素相加
np.add([1, 2], [3, 4]) # [4, 6]
-
np.multiply(x1, x2, /, out=None, *, where=True)
数组元素相乘
np.multiply([1, 2], [3, 4]) # [3, 8]
统计运算
统计计算方法
-
np.sum(a, axis=None, dtype=None, out=None, keepdims=False)
计算数组元素和
axis
:沿指定轴计算(None表示全部元素)
arr = np.array([[1, 2], [3, 4]])
print(np.sum(arr)) # 10
print(np.sum(arr, axis=None)) # 10
print(np.sum(arr, axis=0)) # [4, 6] (列间求和)
print(np.sum(arr, axis=1)) # [4, 6] (行间求和)
-
np.mean(a, axis=None, dtype=None, out=None, keepdims=False)
计算平均值
np.mean([1, 2, 3]) # 2.0
np.mean(arr, axis=1) # [1.5, 3.5] (行间平均)
4. 随机数生成
基础随机
随机数生成
-
np.random.rand(d0, d1, ..., dn)
生成[0,1)均匀分布随机数
np.random.rand() # 单个随机数
np.random.rand(2, 3) # 2x3随机数组
-
np.random.randint(low, high=None, size=None, dtype='l')
生成随机整数
size
:输出形状
np.random.randint(5) # 0-4随机整数
np.random.randint(1, 10, size=(2, 2)) # 2x2的1-9随机数组
分布函数
概率分布随机数
-
np.random.normal(loc=0.0, scale=1.0, size=None)
正态分布随机数
loc
:均值scale
:标准差
np.random.normal(0, 1, 3) # 3个标准正态随机数
-
np.random.uniform(low=0.0, high=1.0, size=None)
均匀分布随机数
np.random.uniform(1, 5, 3) # 3个1-5均匀分布数
5. 文件IO
文件读写
数组文件操作
-
np.save(file, arr, allow_pickle=True, fix_imports=True)
保存数组为.npy文件
arr = np.array([1, 2, 3])
np.save('data.npy', arr)
-
np.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')
加载.npy文件
loaded_arr = np.load('data.npy')