numpy数值计算基础
数组创建
import numpy as np
np.arange(0,1,0.1) # 开始值,终值,步长 (不含终值)
# array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])
np.linspace(0,1,10) # 开始值,终值,个数 (含终值)
# array([0. , 0.11111111, 0.22222222, 0.33333333, ....., 1. ])
np.logspace(0,3,4) # lg(n)=0->lg(n)=3 中的n的4个等比数列
# array([ 1., 10., 100., 1000.])
np.zeros((2,3)) # 全零数组
np.ones((2,3)) # 全1数组
np.eye(3) # 对角线为1的数组
np.diag([1,2,3,4]) # 对角线为1,2,3,4的单位矩阵
随机数生成(random模块)
np.random.seed(n) #随机种子
# 生成的均为0-1的值
np.random.random(10)
np.random.rand(10,5) # 10*5 均值分布
np.random.randn(10,5) # 正态分布
np.random.ranint(low,high=None,size=None) # 可规定最大最小值
数组的操作
arr = np.arange(12)
# [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr = arr.reshape(3,4)
# [[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]
arr.reval()
arr.flatten()
# [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr.flatten('F')
# [ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11]
np.hstack((arr,arr)) # 横向组合
#[[ 0, 1, 2, 3, 0, 1, 2, 3],
# [ 4, 5, 6, 7, 4, 5, 6, 7],
# [ 8, 9, 10, 11, 8, 9, 10, 11]]
np.vstack((arr,arr)) # 纵向组合
# [[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]]
np.concatenate((arr,arr),axis= 0) # 1为横向,0为纵向
np.hsplit(arr,2) #横向分割
#[[0, 1], [[ 2, 3],
# [4, 5], [ 6, 7],
# [8, 9]] [10, 11]]
np.vsplit(arr,2) #纵向分割
np.spplit(arr,2,axis=1) # 1为横向,0为纵向
numpy矩阵
matr1 = np.mat("1 2 3;4 5 6;7 8 9")
matr1 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
# [[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]]
arr1 = np.eye(2)
np.bmat("arr1 arr1;arr1 arr1") #分块创建矩阵
'''[[1., 0., 1., 0.],
[0., 1., 0., 1.],
[1., 0., 1., 0.],
[0., 1., 0., 1.]]'''
matr1 * matr1 # 叉乘
np.multiply(matr1,matr1) # 点乘
matr1.T #转置
matr1.H #共轭转置
matr1.I #逆转置
matr1.A #返回二维视图
ufunc函数
在数组中使用 +,-,*,/,**,>,<,<=,>=,==,!=,只要两个数组的大小一样,就会对每一个值进行计算。
如果不一样,就会有广播机制进行处理
文件读写
np.save(file,arr,allow_pickle=True,fix_imports=True) # xxx.npy
np.savez(file,arr,arr2) # 可保存多个,xxx.npz
np.load(file) #读取成一个 含有一个或多个数组 的数组
np.savetxt(filename,data,fmt='%.18e',delimiter=' ',newline='\n') # 文件名,数据,格式,分隔符,换行符
np.loadtxt(filename,fmt='%.18e',delimiter=' ')
np.genfromtxt(filename,,delimiter=' ') # 功能同上,但面向结构化数组和缺失数据
统计分析
排序
arr.sort() #直接排序
arr.sort(axis=1) #沿着横轴排序
arr.sort(axis=0) #沿着纵轴排序
arr.argsort() # 返回排序后的序号(此序号为原数组时候的序号)
# [10,12,13,11] ---> [0,3,1,2]
np.lexsort((a,b,c)) # 多个键的数组间排序,三个值相加后排序
去重和重复
np.unique(arr) # sorted(set(arr)) 去重
np.tile(A,resp) # 数据,重复几次b 对数组操作
np.repeat(a,repeat,axis=None) # 数据,重复几次,按行(0)or列(1) 对数组中每个数字的操作
常用统计
np.sum(arr) # 求和
arr.sum(axis = 0) #沿着纵轴求和
arr.sum(axis = 1) #沿着横轴求和
np.mean(arr) #求均值
arr.mean(axis = 0) #沿着纵轴求均值
arr.mean(axis = 1) #沿着横轴求均值
np.std(arr) #标准差
np.var(arr) #方差
np.min(arr) #最小值
np.max(arr) #最大值
np.argmin(arr) #最小值索引
np.argmax(arr) #最大值索引
np.cumsum(arr) #每个位置的累计和
np.cumprod(arr) #每个位置的累计积