一.numpy中常见的数值计算方法
1.sum()函数,矩阵元素求和
import numpy as np array_test=np.array([[1,2,3], [4,5,6]]) #1.sum()函数求和 np.sum(array_test) #计算出矩阵中所有元素的和 ###指定要操作的是什么轴 np.sum(array_test,axis=0) #按横轴求和,即将每一列相加,返回每一列的和 np.sum(array_test,axis=1) #按纵轴求和,即将每一行相加,返回每一行的和 np.sum(array_test,axis=-1) #按最后一轴进行求和,即按照纵轴求和 ###除了可以使用np.sum()之外,还可以直接使用矩阵调用sum()函数 array_test.sum() #等价于np.sum(array_test) array_test.sum(axis=0)#等价于np.sum(array_test,axis=0) array_test.sum(axis=1)#等价于np.sum(array_test,axis=1)
2.prod(),矩阵元素求积
import numpy as np array_test=np.array([[1,2,3], [4,5,6]]) #prod()函数,对矩阵元素求积 np.prod(array_test) #对所有元素求积 np.prod(array_test,axis=0) #指定求积的维度 ##同样,prod()函数除了可以使用np.prod()之外,还可以使用array_test.prod()
3.min(),max()求矩阵的最小值和最大值
##min()函数,求矩阵最小值,max()函数,求矩阵最大值其用法和sum函数一致 import numpy as np array_test=np.array([[1,2,3], [4,5,6]]) array_test.min() array_test.min(axis=0) array_test.min(axis=1)
array_test.max()
array_test.max(axis=0)
array_test.maxi(axis=1)
4.argmin(),argmax(),返回矩阵最小值和最大值的索引
#argmin(),argmax() 返回矩阵最小值最大值的索引,其用法和sum()一致 import numpy as np array_test=np.array([[100,21,345], [4,5,6]]) array_test.argmin() #注意多维矩阵是按照行来依次存放的 array_test.argmin(axis=0)#每一列最小元素的索引 array_test.argmin(axis=1)#每一行最小元素的索引 array_test.argmax() array_test.argmax(axis=0) array_test.argmax(axis=1)
5.mean(),std(),var() 返回矩阵的均值,标准差和方差
#mean(),平均值,std(),标准差,var()方差,用法和sum()一样 import numpy as np array_test=np.array([[100,21,345], [4,5,6]]) array_test.mean() array_test.mean(axis=0) array_test.mean(axis=1)
array_test.std() array_test.std(axis=0) array_test.std(axis=1) array_test.var() array_test.var(axis=0) array_test.var(axis=1)
6.clip(a,b),将矩阵元素的值限制在a,b之间
##clip(a,b)将矩阵的值限制在a,b之间:所有小于a的值全部变成a,所有大于b的值全部变成b import numpy as np array_test=np.array([[1,2,3], [4,5,6]]) array_test.clip(3,4)
7.round(),四舍五入
##round()四舍五入 array_test=np.array([[1.222,0.098,32.343],[4.6543,5.8212,2.22333]]) array_test.round() ##可以通过decimals参数来指定四舍五入的位数 array_test.round(decimals=2) #保留两位小数
二.numpy中的排序
array_test=np.array([[9.3,4.5,6.7], [4.2,2.78,9.03]]) #####1.sort()默认按行数进行升序排序,可以通过axis参数指定排序的维度, array_test.sort() array_test.sort(axis=0) #按照列数进行排序 ####除了使用array_test.sort(),还可以使用np.sort(array_test,axis=1),用法和sum类型 ###2.np.argsort()返回排好序后的索引矩阵,即排好序后,原矩阵的每一个元素应该在什么位置上 np.argsort(array_test) #等价于array_test.argsort() #$array_test ###3.searchsorted(array_test,value) 返回将value中的值插入到array_test中应该插入的位置,其中array_test是已经排好序的矩阵 array_test=np.linspace(0,10,10) #返回一个矩阵,该矩阵的元素在0到10之间,将0到10的距离分成10分,按照顺序赋给矩阵 values=np.array([2.4,8.7,6,4]) np.searchsorted(array_test,values) ###4.lexsort()指定按照某一行或某一列进行排序 array_test=[[3,2,5],[56,32,89],[34,12,42]] #index = np.lexsort([-1*array_test[:,0],array_test[:,2]]) index=np.lexsort([-1*array_test[:,0],array_test[:,2]])# 第一列降序,第三列升序
三.矩阵形状操作
###矩阵形状操作 import numpy as np array_test=np.array([1,2,3,4,5,6,7,8]) #1.shape查看矩阵的形状 array_test.shape #2.改变矩阵的形状,注意,改变矩阵的形状时必须要保持矩阵元素总数相等,否则会报错 ###2.1可以通过shape=a,b来将原矩阵变成指定维度的矩阵 array_test.shape=2,4 #将原来的一维矩阵变成2行四列的二维矩阵。 ####2.2reshape()函数改变形状 array_test.reshape(1,8) ##将矩阵变为一行8列矩阵 #3.给矩阵增加维度newwaxis array_test=array_test[:,np.newaxis] #通过定位来决定新的维度增加在什么位置 array_test=array_test[:,:,np.newaxis] array_test=array_test[:,np.newaxis,:,np.newaxis] #可以增加多个维度 #4.将矩阵没有用的维度去掉,压缩维度squeeze() array_test=array_test.squeeze() #5.矩阵的转置transpose()和T array_test.transpose() array_test.T #两种操作等价 #6.矩阵的连接 a=np.array([[123,54,63,32],[4233,1345,78,56]]) b=np.array([[34,12,89,567],[80,78,31,45]]) ###6.1 concatenate()默认将一个矩阵按行依次拼接到另外一个矩阵,可以通过axis参数指定拼接的维度 c=np.concatenate((a,b)) #将b矩阵按行拼接到矩阵a的末尾 c=np.concatenate((a,b),axis=1) #将矩阵按列拼接 ###6.2vstack(),hsatck()拼接,vstack()等价于按行拼接,hsatck()等价于按列拼接 c=np.vstack((a,b)) c=np.hstack((a,b)) #7.矩阵的拉伸,即将多维矩阵拉伸成为一维矩阵 flatten()和ravel(),这两个函数效果相同 a.flatten() a.ravel()
四.生成矩阵的常用方法
####生成ndarray矩阵的常用方法 import numpy as np #1.np.array()方法将列表转为矩阵 list=[[1,2,3],[4,5,6]] array_test=np.array(list) #2.使用arange()函数构造矩阵,用法和range()函数相同,区别在于range()函数构造一个list,arange()构造一个矩阵 array_test=np.arange(10) #构造一个0-9的矩阵 array_test=np.arange(20,50)#构造一个值从20到49的矩阵 array_test=np.arange(20,50,2)#以2作为步长 array_test=np.arange(20,50,2,dtype=np.float32) #指定数据类型 #3linspace(a,b,c)生成一个有c个元素的矩阵,矩阵元素按照等差数列产生,第一个元素是a,最后一个元素是b array_test=np.linspace(1,10,20) #4 logspace(a,b,c,base=e)生成有c个元素的等比数列,公比是e,第一个元素是e^a,最后一个元素是e^b次方,默认e=10 array_test=np.logspace(1,10,10,base=2) #生成2,4,8,16,32,64,128,256,512 #5.meshgrid(X,Y)生成X*Y的网格X作为横轴,Y作为纵轴 x=np.arange(10) y=np.arange(10) x,y=np.meshgrid(x,y) #x是一个10x10的矩阵,每一行即为原来x的值,y是一个10x10的矩阵,每一列即为原来y的值 #6.r_[]生成行向量 array_test=np.r_[0:10:1] #生成一个行向量,其值从0开始到9,步长为1 #7.c_[]生成列向量 array_test=np.c_[0:10:1] #生成一个列向量,其值从0到9,步长为1 #8.zeros()生成0矩阵 array_test=np.zeros(3) #生成一维0向量,有3个值 array_test=np.zeros((3,3)) #生成3x3的零矩阵 #9.ones()生成1矩阵 array_test=np.ones(3) #生成一维1向量,有3个值 array_test=np.ones((3,3)) #生成3x3的1矩阵 array_test=np.ones((3,3))*8 #生成3x3的8矩阵 array_test=np.ones((3,3),dtype=np.float32) #指定数据类型 #10.empty()生成空矩阵 array_test=np.empty(6) #11.fill()用某一特定的值填充矩阵 array_test.fill(1) #12.zeros_like()生成一个与已知矩阵有相同结构的0矩阵,ones_like()生成一个与已知矩阵有相同结构的1矩阵 array_test1=np.array([[1,2,3], [4,5,6], [7,8,9]]) array_test=np.zeros_like(array_test1) array_test=np.ones_like(array_test1) #13identity()生成单位矩阵 array_test=np.identity(6) array_test
五.矩阵的常用运算操作
####矩阵运算操作 import numpy as np #1.multiply()点乘,即对应位置的元素相乘 x=np.array([5,5]) y=np.array([2,3]) np.multiply(x,y) #2.dot()矩阵相乘 x=np.array([[2,3],[4,5]]) y=np.array([[6,7],[8,9]]) np.dot(x,y) #3.* 对应行的对应位置相乘,点乘 print(x*y) #4.== 判断两个矩阵对应位置上的元素是否相等,返回bool矩阵 x==y #logical_and()逻辑或,logical_or()逻辑与,logical_not()逻辑非,矩阵对应位置进行逻辑运算,返回bool矩阵 np.logical_and(x,y) np.logical_or(x,y) np.logical_not(x)
六.numpy随机模块
#1.random.rand()生成0-1之间的随机数 np.random.rand(3) np.random.rand(3,3) #2.random.randint(a=0,b,size=())生成的矩阵是取值在[a,b)之间的随机整数,矩阵的形状由size参数指定 a参数默认是0,一维时size可以简写 np.random.randint(10,size=(4,5)) np.random.randint(2,45,size=(4,5)) np.random.randint(0,10,3) #生成三个数,注意,这时参数a不可省略 #3.random.random_sample()生成一个随机数,与random.random()等价 np.random.random_sample() #4. random.normal(mu,sigma,n)按照正态分布生成随机数,其中mu是正态分布的均值,sigma是标准差,n是要生成的随机数的个数 mu=0.1 sigmal=2 np.random.normal(mu,sigmal,10) #set_printoptions(precision=n)设置小数的精度,保留n位小数 np.set_printoptions(precision=2) np.random.normal(mu,sigmal,10) #5.random.shuffle()洗牌,即打乱数组的顺序,会改变原数组的值 array_test=np.arange(10) np.random.shuffle(array_test) #random.seed()设置随机种子,设置随机种子后,就会生成固定的随机数 np.random.seed(100) np.random.normal(0.1,0.01,10)
七numpy读取操作
###读写txt操作 import numpy as np #1.loadtxt() 读取txt文件的数据,结果会转为为矩阵 #data=np.loadtxt('test.txt') #data = np.loadtxt('test.txt',delimiter = ',',skiprows = 1,usecols=(0,2,3)) #其中delimiter指定分隔符,skiprows跳过几行,usecols指定使用哪些列 #2.savetxt()将文件保存为txt格式 #np.savetxt('test.txt',array_test,fmt='%.2f',delimiter = ',') #fmt指定保存数据的格式,delimiter指定分隔符 ###读写array结构数据 #1.save()将数组保存为ndarry结构的文件 array_test=np.array([[1,2,3],[4,5,6]]) np.save('array_test.npy',array_test) #2.load()加载ndarry结构数据 test=np.load('array_test.npy') array_test=np.array([1,2,3,4]) test=np.array([3,4,5,6]) #3.将多个array数据打包成一个压缩包 np.savez('array_test.npz',a=array_test,b=test)#将生成一个压缩包,压缩包里面有a,b两个文件,分别是这两个矩阵的数据 #加载压缩包 data=np.load('array_test.npz') #data是一个字典,key值即为a,b,value值是对应的矩阵数据 data.keys() #即a,b data['a'] data['b']