【Python数据处理】-Numpy库

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对象为非同质对象

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

猜你喜欢

转载自blog.csdn.net/DataFrame/article/details/89433788