python-numpy

it2023-10-27  65

numpy

1.创建numpy数据和矩阵2.numpy-array中的具体运算3.排序和使用索引

NumPy(Numerical Python) Python 语言的扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 NumPy 官网 http://www.numpy.org/


1.创建numpy数据和矩阵

import numpy as np print(np.ones((3,5))) print(np.full(shape=(3,5),fill_value=666)) print(np.arange(0,20,2))#类似range print(np.linspace(0,20,11))#第三个值:等长截取x个点 包含020 print(np.random.randint(0,10))#随机生成一个0-10范围内的数 print(np.random.randint(0,10,size=10))#向量 10个元素 范围0-10 np.random.seed(666) print(np.random.randint(0,7,size=(3,5))) np.random.seed(666) print(np.random.randint(0,7,size=(3,5))) print(np.random.random(10))#0-1之间随机浮点数 print(np.random.normal())#符合正态分布的随机数 print(np.random.normal(0,1,size=(3,5)))#均值0 方差1 大小3*5 #numpy.array基本操作 x=np.arange(10) X=np.arange(15).reshape(3,5) #基本属性 print(x.ndim)#查看维度 print(x.shape)#返回元组(10,0) print(X.shape)#返回(35print(x.size)##返回大小 共几个元素 #numpy.array的数据访问 print(x) print(x[0]) print(x[-1]) print(X[2,2])#取X[2][2] 使用逗号表达式 print(X[0:3,0:4])#切片 print(X[:,::2]) print(X[::-1,::-1]) print(X[:,0])#只取第一列 subX=X[:2,:3] print(subX) subX[0,0]=100#修改子矩阵会修改原矩阵 反之亦然 print(subX) print(X) subX=X[:2,:3].copy()#此时不影响原矩阵 #reshape print(x.shape) print(x.reshape(2,5))#未改变x自身x依然是一维 A=x.reshape(2,5)#A为二维 print(A.shape) print(x.reshape(10,-1))#只想是10行 列不管 print(x.reshape(-1,5)) #合并 x=np.array([1,2,3]) y=np.array([3,2,1]) z=np.array([666,666,666]) print(np.concatenate([x,y,z]))#拼接1*9 A=np.array([[1,2,3], [4,5,6]]) print(np.concatenate([A,A]))#4*3 两样本 三相同特征拼接 print(np.concatenate([A,A],axis=1))#2*6两样本 三个不同特征拼接 A2=np.concatenate([A,z.reshape([1,-1])]) print(A2) np.vstack([A,z])#智能垂直叠加 B=np.full((2,2),100) print(np.hstack([A,B])) #分割 x=np.arange(10) x1,x2,x3=np.split(x,[3,7]) print(x1) print(x2) print(x3) x1,x2=np.split(x,[5]) print(x1) print(x2) A1,A2=np.split(A,[2],axis=1) print(A1) print(A2) #np.vsplit hsplit data=np.arange(16).reshape((4,4)) print(data) X,y=np.hsplit(data,[-1]) print(X) print(y) print(y[:,0])

2.numpy-array中的具体运算

代码如下(示例):

n=10 L=[i for i in range(n)] print(L) print(2*L)#两行L A=[] for e in L: print(A.append(2*e)) print(A) L=np.arange(n) A=2*L print(A) #Universal Functions print(X+1) print(X//2)#//整数除法 /简单除法 print(1/(X+1)) #np.sin(x),np.cos(x) np.exp(x),np.log2(x),np.pow(3,x) #矩阵间的运算 A=np.arange(4).reshape(2,2) B=np.full((2,2),10) print(A+B) print(A*B) print(A.dot(B))#print(np.dot(A,B)) print(A.T)#转置 #向量和矩阵运算 v=np.array([1,2]) print(A+v) print(np.vstack([v]*A.shape[0])+A) print(np.tile(v,(2,1))) print(A.dot(v)) print(v.dot(A)) #矩阵的逆 print(np.linalg.inv(A)) print(A.dot(np.linalg.inv(A)))#原矩阵*逆矩阵=单位矩阵 x=np.arange(12).reshape(3,4) pinvX=np.linalg.pinv(x)#只有方阵才有逆矩阵 非方阵-伪逆矩阵 print(pinvX) #聚合操作 import numpy as np L=np.random.random(100) print(sum(L)) print(np.sum(L)) X=np.arange(16).reshape(4,-1) print(X) print(np.sum(X,axis=0)) print(np.product(X))#乘 print(np.product(X+1)) #np.mean(x) np.median(X) np.std(X) for percent in [0,25,50,75,100]: print(np.percentile(X,q=percent))#百分位0:最小值 100:最大值

3.排序和使用索引

代码如下(示例):

import numpy as np np.random.seed(666) x=np.random.normal(0,1,size=1000000) #索引 print(np.min(x)) print(np.argmin(x)) print(np.argmax(x)) print(x[717667]) print(np.max(x)) #排序和使用索引 x=np.arange(16) print(x) np.random.shuffle(x)#乱序 print(x) print(np.sort(x)) print(x.sort())#本身修改 X=np.arange(16).reshape(4,-1) print(np.sort(X,axis=1))#列由小到大排序 np.random.shuffle(x) print(x) print(np.argsort(x))#按照索引有序排序 print(np.partition(x,3))#快速排序思想 以3为基准 print(np.argpartition(x,3))#快排索引 print(np.argsort(X,axis=0))#按照行排序 返回索引 print(np.argpartition(X,2,axis=0)) #Fancy Indexing import numpy as np x=np.arange(16) print(x) print(x[3:9:2])#非等间距步长怎么办 ind=[3,5,8] print(x[ind]) ind=np.array([[0,2],[1,3]])#由索引得到二维矩阵 print(x[ind]) X=x.reshape(4,-1) print(X) row=np.array([0,1,2]) col=np.array([1,2,3]) print(X[row,col]) print(X[0,col])#第1print(X[:2,col])#前两行 col=[True,False,True,False]#True为感兴趣 print(X[1:3,col]) print(x<4)#得到布尔数组 print(X<6) print(np.sum((x>3)&(x<8))) print(np.count_nonzero(x<=3)) print(np.any(x<0)) print(np.all(x>=0)) print(np.sum(x%2==0)) print(x[x<6])#得到子数组
最新回复(0)