1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
numpy.array(object,dtype=None,ndmin=None)

isinstance(v,(int,float))用来判断变量v是否是内建的整数或浮点数类型
NumPy有自己的数值类型,如numpy.int32,numpy.int64
虽然看起来像普通的int/float,但它们并不是Python内置的int/float的子类
即NumPy的标量(scalar)类型不会被isinstance(...,(int,float))识别成普通数值

NumPy数组的布尔值取决于所有元素,Python不知道该按全部为真还是部分为真判断。
一个数组代表的是数值矩阵,不是普通容器
正确判断NumPy数组是否为空的写法

import numpy as np
arr = np.array([])
if arr.size == 0:
print("数组为空")
else:
print("数组非空")

.size属性返回数组元素总数
.size==0 时,数组为空

np.loadtxt(fname,delimiter)从纯文本文件中读取数字数据并转换成numpy数组,fname文件名或文件路径,delimiter文件中的数值分隔符,空格分隔可以省略

NPZ文件包含对象数组,而默认情况(allow_pickle=False)下出于安全原因NumPy不加载包含Python对象的npz,改为True即可
data=np.load(fname,allow_pickle=True)

~是按位取反操作符,会将布尔数组中True转换为FalseFalse转换为True
x[~np.isnan(y)]是布尔索引,例如x=[0,1,2,3],y=[1,NaN,3,4],则~np.isnan(y)得到[True,False,True,True],于是x[~np.isnan(y)]返回[0,2,3],即x中与y中非NaN对应位置的元素

NumPy常用函数和方法

功能分类 方法示例 说明
数组属性 .shape 数组形状
.dtype 数据类型
.size 元素总数
ndim 数组维度
itemsize 每个元素占字节数
数学运算 np.add(a,b) 加法,支持广播
np.subtract(a,b) 减法
np.multiply(a,b) 乘法
np.divide(a,b) 除法
np.power(a,b) 幂运算
np.sqrt(a) 平方根
np.exp(a) 指数
np.log(a) 自然对数
np.round(a,decimals=0) 四舍五入
聚合函数 np.sum(a,axis=None) 求和
np.mean(a,axis=None) 均值
np.median(a,axis=None) 中位数
np.std(a,axis=None) 标准差
np.var(a,axis=None) 方差
np.min(a,axis=None) 最小值
np.max(a,axis=None) 最大值
np.argmax(a,axis=None) 最大值索引
np.argmin(a,axis=None) 最小值索引
线性代数 np.dot(a,b) 点积/矩阵乘法
np.matmul(a,b) 矩阵乘法
np.transpose(a) 转置
np.linalg.inv(a) 矩阵求逆
np.linalg.det(a) 行列式
形状变换 np.reshape(a,newshape) 重塑数组
np.flatten(a) 展平数组
np.split(a,indices_or_sections) 分割数组
随机数 np.random.rand(d0,d1,...) 均匀分布随机数
np.random.randn(d0,d1,...) 标准正态分布随机数
np.random.randint(low,high,size) 整数随机数
数组生成 np.arange(start,stop,step) 按步长生成等差序列
复制与唯一 np.copy(a) 复制数组
np.unique(a) 找唯一值
np.isnan() 判断值是否为NaN,是则返回True
np.any() 检查数组是否至少含一个元素为True
数组构造 np.zeros(shape) 生成全0数组
np.ones(shape) 生成全1数组
np.full(shape,fill_value) 生成指定值填充的数组
np.eye(N) 生成单位矩阵(对角为1)
np.identity(n) 生成n阶单位矩阵
转换函数 np.asarray(a) 转换为数组(避免复制)
np.array(a) 创建数组
np.eye(N,M) 创建N行M列正对角线为1,余者为0的二维数组
np.ones((N,M)) 创建N行M列的全1二维数组
np.ones((N,M,K)) 创建3行3列对角线为N,M,K的二维数组
np.random.randn(N,M) 创建N行M列服从正态分布的二维随机数组
np.random.randint(Min,Max,(N,M)) 创建N行M列二维随机整数数组,元素最小值Min最大值Max