numpy入门(2)

 

一.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)
View Code

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]])# 第一列降序,第三列升序
View Code

三.矩阵形状操作

###矩阵形状操作
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()
View Code

 四.生成矩阵的常用方法

####生成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
View Code

五.矩阵的常用运算操作

####矩阵运算操作
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)
View Code

六.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)
View Code

七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']
View Code
原文地址:https://www.cnblogs.com/jiachuantang/p/8951780.html