numpy
文章目录
Numpy
-
import numpy as np # 创建矩阵 np.mat(np.random.randint(100,200,50).reshape(10,5))
-
np.mat( np.arange(12).reshape(3,4) ) # 数组转矩阵
矩阵
- 矩阵:二维数组
- 特例
- 向量:1xn或nx1的矩阵
- 标量:1x1的矩阵
- 特殊矩阵
- 全0全1矩阵
- 单位矩阵
- 运算
- 相加、减的两个矩阵
- 必须有相同的行和列
- 行和列对应元素相加减
- 矩阵的乘法
- mxp的矩阵 * pxn的矩阵 = mxn的矩阵
- 矩阵*单位矩阵
- 相加、减的两个矩阵
- 特例
数组
- 运算
- 加法
*
- 加法
ndarray数组的创建
创建 | 含义 | |
---|---|---|
np.array(list/tuple,dtype=np.float32) | 列表、元组类型创建 | np.array([[1,2],[3,4],(5,6)]) |
np.arange(n) | 元素从0到n-1 | np.arange(10) |
np.ones(shape) | 全1数组 shape是元组类型 |
np.ones((3,4)) |
np.ones((2,3,4)) | 最外层有2个元素 每个元素有3个维度 每个维度下有4个元素 |
|
np.zeros(shape) | 全0数组 | np.zeros((3,4),dtype=np.int32) |
np.full(shape,val) | 生成shape数组 每个元素值为val |
np.full((2,2),‘a’) |
np.eye(n) | n*n单位矩阵 对角线为1 其余为0 |
np.eye(5) |
-
函数 说明 np.ones_like(a) 根据数组a的形状生成一个全1数组 np.zeros_like(a) 根据数组a的形状生成一个全1数组 np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值为val -
函数 说明 np.linspace() 根据起止数据等间距地填充数据,形成数组 np.concatenate() 将2个或多个数组合并成一个新的数组 -
a = np.linspace(1,10,4) # [1,10] b = np.linspace(1,10,4,endpoint=False) # [1,10) np.concatenate((a,b))
-
ndarray数组的维度变换
方法 | 说明 |
---|---|
.reshape(shape) | 不改变数组元素,返回一个shape形状的数组,原数组不变 |
.resize(shape) | 与.reshape()功能一致,但修改原数组 |
.swapaxes(ax1,ax2) | 将数组n个维度中两个维度进行调换 |
.flatten() | 将数组进行降维,返回折叠后的以为数组,原数组不变 |
属性
-
轴,axis,保存数据的维度
-
秩,rank,轴的数量
a = np.array([[],[]]) a.ndim # 秩、轴的数量或维度的数量
-
属性 说明 .ndim 秩,轴的数量或维度的数量 .shape 对于矩阵,n行m列 .size ndarray对象元素的个数 .dtype ndarray对象的元素类型 .itemsize ndarray对象中每个元素的大小,字节为单位
ndarray的元素类型
数据类型 | 说明 |
---|---|
bool | 布尔类型 |
intc | 与C语言的int类型一致,int32或int64 |
intp | 用于索引的整数,int32或int64 |
int8 | 字节长度的整数,取值:[-128,127] |
int16 | 16位长度的整数,取值:[-32768,32767] |
int32 | 32位长度的整数,取值:[-231, 231-1] |
int64 | 64位长度的整数,取值:[-263, 263-1] |
uint8 | 8位无符号整数,取值:[0,255] |
uint16 | 16位无符号整数,取值:[0,65535] |
uint32 | 32位无符号整数,取值:[0,232-1] |
uint64 | 64位无符号整数,取值:[0,264-1] |
float16 | 16位版精度浮点数:1位符号位,5位指数,10位位数 |
float32 | 32位版精度浮点数:1位符号位,8位指数,23位位数 |
float64 | 64位版精度浮点数:1位符号位,11位指数,52位位数 |
complex64 | 复数类型,实部和虚部都是32位浮点数 |
complex128 | 复数类型,实部和虚部都是64位浮点数 |
- 实部(.real)+j虚部(.imag)
- 非同质的ndarray元素为对象类型(大规模数据处理,尽量避免使用非同质对象)
- 非同质对象:元素1和元素2的够成数量不一
- 元素1由3个元素构成,元素2由5个元素构成
- 元素1和元素2组成的ndarray对象为非同质对象
- 非同质对象:元素1和元素2的够成数量不一
ndarra数组的类型变换
new_a = a.astype(new_type)
- astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致。
ndarray数组向列表的转换
-
ls = a.tolist()
-
a = np.full((2,3,5),25,dtype=np.int32) a.tolist()
运算
-
数组与标量之间的运算
-
作用于数组的每一个元素
-
a = np.arange(4).reshape(2,2) b = np.arange(4,0,-1).reshape(2,2) a * b # 按索引位置,对应相乘 a.dot(b) # 矩阵乘法 np.dot(a,b) # 矩阵乘法
-
Numpy一元函数unary ufunc
一元ufunc | 说明 |
---|---|
np.abs()、np.fabs() | 计算整数、浮点数或复数的绝对值。 对于非复数值,可以使用更快的fabs |
np.sqrt() | 计算各元素的平方根:arr ** 0.5 |
np.square() | 计算各元素的平方:arr ** 2 |
np.exp() | 计算各元素的指数ex |
np.log()\np.log10\np.log2\np.log1p | 分别:自然对数(e为底数),底数为10的log,底数为2的log,log(1+x) |
np.sign() | 计算各元素的正负号:1(正数),0(零),-1(负数) |
np.ceil() | 向上取整 |
np.floor() | 向下取整 |
np.rint() | 四舍五入取整 |
np.modf() | 小数部分和正数部分以两个独立数组返回arr1,arr2 = np.modf(arr3) |
np.isnan() | 返回一个布尔型数组:“哪些值是NaN" |
np.isfinite()\np.isinf() | 返回布尔型数组:哪些元素是有穷的,哪些元素是无穷的 |
np.cos()\np.sin()\np.tan() | 普通型三角函数 |
np.cosh()\np.sinh()\np.tanh() | 双曲型三角函数 |
np.arccos()\np.arcsin()\np.arctan() | 反三角函数 |
np.arccosh()\np.arcsinh()\np.arctanh() | 反三角函数 |
np.logical_not() | 计算各元素not x的真值 相当于-arr |
Numpy二元函数 binary ufunc
二元ufunc | 说明 |
---|---|
np.add(arr1,arr2) | 将数组对应元素相加 |
np.subtract() | 从第一个数组中,减去第二个数组中的元素 |
np.multiply() | 数组元素相乘 |
np.divide() | 除法 |
np.floor_divide() | 向下圆整除法(丢弃余数) |
np.power() | 对第一个数组中的元素A,根据第二个数组中相应元素B,计算AB |
np.maximum() | 元素级的最大值计算 |
np.fmax() | 忽略NaN的,元素级的最大值计算 |
np.minimum() | 元素级的最小值计算 |
np.fmin() | 忽略NaN的,元素级的最小值计算 |
np.mod() | 元素级的求模计算(除法的余数) |
np.copysign() | 将第二个数组中的值的符号赋值给第一个数组中的值 |
np.greater() | 执行元素级的比较>,产生布尔型数组 |
np.greater_equal() | 执行元素级的比较>=,产生布尔型数组 |
np.less() | 执行元素级的比较<,产生布尔型数组 |
np.less_equal() | 执行元素级的比较<=,产生布尔型数组 |
np.equal() | 执行元素级的比较==,产生布尔型数组 |
np.not_equal() | 执行元素级的比较!=,产生布尔型数组 |
np.logical_and() | 执行元素级的真值逻辑元素:& ,且 |
np.logical_or() | 执行元素级的真值逻辑元素:|,或 |
np.logical_xor | 执行元素级的真值逻辑元素:^,异或 |
矢量化三元表达式 np.where(arr1,第二个参数,第三个参数)
-
第二个和第三个参数不必是数组,可以是标量值
-
相当于
x if condition else y
的矢量化版本 -
np.where(arr1>0,1,-1)# 元素>0的返回1,否则返回-1
-
类似于MySQL的控制流函数
-
select education,salary,case education when '大专' then 1 when '本科' then 2 when '硕士' then 3 when '博士' then 4 else 0 end as tmp from demp_table;
-
相当于MySQL的三元表达式
-
select education,if(salary > 9,'优先','等待') as tmp from demp_talbe;
-
python的三元表达式结果1 if 表达式 else 结果2
-
a = 10 b = 20 r = a if a>b else b
-
python列表推倒时
-
list1 = [i*i for i in range(2,11,2)]#生成1~10之间的所有偶数
随机数组
函数 | 说明 |
---|---|
np.random.rand() | 均匀分布,[0,1),浮点数 |
np.random.randn(3,4,5) | 标准正态分布 均值:1 标准差0 |
np.random.randint(low,[high,shape]) | 范围[low,high),随机整数 |
np.random.seed() | 随机数种子 |
函数 | 说明 |
---|---|
np.random.shuffle(a) | 根据数组a的第1轴(最外层维度)进行随排列,改变数组a |
np.random.permutation(a) | 同上,不改变数组a |
np.random.choice(a[,size,replace,p]) | 从一维数组a中以概率p抽取元素 形成size形状新数组 replace表示是否可以重用元素 |
-
b = np.random.randint(100,200,(8,)) np.random.choice(b,(3,2)) np.random.choice(b,(3,2),replace=False) # 之前被选取元素不再被选取 np.random.choice(b,(3,2),p = b/np.sum(b))
函数 | 说明 |
---|---|
np.random.uniform(low,high,size) | 均匀分布, [low,high) size形状 |
np.random.normal(loc,scale,size) | 正态分布, loc均值, scale标准差 |
np.random.poisson(lam,size) | 泊松分布 lam随机事件发生概率 size形状 |
统计函数
- axis=None 是统计函数的标配参数
- axis为整数、元组
函数 | 说明 |
---|---|
np.sum(a,axis=None) a.sum(axis=None) |
|
np.mean(a,axis=None) a.mean(axis=None) |
|
np.average(a,axis=None,weights=None) | 加权平均值 weights输入每个元素加权值 |
np.std(a,axis=None) a.std(axis=None) |
标准差 |
np.var(a,axis=None) a.var(axis=None) |
方差 |
函数 | 说明 |
---|---|
np.min(a) | |
np.max(a) | |
np.argmin(a) a.argmin() |
计算数组a中元素最小值的降一维后下标 |
np.argmax(a) a.argmax() |
扁平化后的下标 |
np.unravel_index | 根据shape将一维下标index转换成多维下标 |
np.ptp(a) | 最大值 - 最小值 |
np.median(a) | 中位数(中值) |
-
扁平化后的下标–重塑成多维下标
np.unravel_index(np.argmax(b),b.shape)
梯度函数 | 说明 |
---|---|
np.gradient(f) | 计算数组f中元素的梯度, 当f为多维时,返回每个维度梯度 |
- 梯度:连续值之间的变化率,即斜率
- XY坐标轴连续是哪个X坐标对应的Y轴值:a,b,c,其中,b的梯度是:(c-a)/2
a.cumsum(0) | 列累加 |
---|---|
a.cumprod(1) | 行累加 |
IO
Numpy便捷文件存取
-
np.save(fname, array) # 扩展名为.npy np.savez(fname, array) # 压缩扩展名为.npz
-
np.load(fname) # 以.npy为扩展名,压缩扩展名为.npz
By 儒冠多误身 2019/04/21