Python基础——numpy库的使用

1、numpy库简介:

   NumPy提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

2、numpy库使用:

  注:由于深度学习中存在大量的矩阵运算,实践中也主要关注此点。

  运行环境:Python3

(1)矩阵(matrix)、列表(list)、数组(array)的转换

list变成array: np.array(A) 
list变为matrix:np.mat(A) 
array和matrix相互转换: np. mat(A),np. array(A)
matrix和array变换为list: A.tolist()
例:
import numpy as np              #导入NumPy库
if __name__ == "__main__":
    a = [[1, 2, 3], [4, 5, 6]]  # 列表
    b = np.array(a)             # 列表转数组   
    c = np.mat(a)               # 列表转矩阵
    d = np.array(c)             # 矩阵转数组
    e = np.mat(d)               # 数组转矩阵 
    f = e.tolist()              # 矩阵转列表

(2) 矩阵创建

import numpy as np       #导入NumPy库
if __name__ == "__main__":
     a =[1,2,3] #列表
     a =np.array(a)  #数组
     a1=np.mat(a)   #创建一个1*3的矩阵  或 a2=np.mat([1, 2, 3])
     a2=np.mat([[1,3],[2,5]])  #创建一个2*2的矩阵
     b1=a2[1,:]  #提取第 2 行
     b2=a2[:,1]  #提取第 2 列
     c1=np.mat(np.zeros((3,3))) #创建一个3*3的零矩阵,矩阵这里zeros函数的参数是一个tuple类型(3,3)
     c2=np.mat(np.ones((2,4))) #创建一个2*4的1矩阵,默认是浮点型的数据,如果需要时int类型,可以使用dtype=int
     c3=np.mat(np.eye(2,2,dtype=int)) #产生一个2*2的对角矩阵,dtype=int
     c4=np.mat(np.diag([1,2,3])) #生成一个对角线为1、2、3的对角矩阵

(3)矩阵运算

import numpy as np       #导入NumPy库
if __name__ == "__main__":
    #矩阵相乘
    a1=np.mat([1,2]); 
    a2=np.mat([[1],[2]]);
    a3=a1*a2 #1*2的矩阵乘以2*1的矩阵,得到1*1的矩阵
    #矩阵点乘——矩阵对应元素相乘
    b1=np.mat([1,2]);
    b2=np.mat([2,2]);
    b3=np.multiply(b1,b2)
    #矩阵求逆
    c1=np.mat(np.eye(2,2)*0.5)
    c2=c1.I
    #矩阵转置
    d1=np.mat([[1,1],[0,0]])
    d2=d1.T
    #矩阵求和
    e1=np.mat([[2,1],[3,5]])
    e2=e1.sum(axis=0) #列和,这里得到的是1*2的矩阵
    e3=e1.sum(axis=1) #行和,这里得到的是2*1的矩阵

(4)计算矩阵最大、最小值和索引

import numpy as np       #导入NumPy库
if __name__ == "__main__":
    a1=np.mat([[1,1],[2,3],[4,2]])  #得到的是3*2的矩阵
    a2=a1.max()        #计算a1矩阵中所有元素的最大值,这里得到的结果是一个数值
    a3=np.max(a1[:,1]) #计算第2列的最大值,这里得到的是一个数值
    a4=a1[1,:].max()   #计算第2行的最大值,这里得到的是一个数值
    a5=np.max(a1,0)    #计算每列的最大值,这里得到是一个1*2矩阵
    a6=np.max(a1,1)    #计算每行的最大值,这里得到是一个3*1矩阵
    a7=np.argmax(a1,0) #计算每列的最大值对应在该列中的索引,这里得到是一个1*2矩阵
    a8=np.argmax(a1[1,:])  #计算第二行中最大值对应在该行的索引,这里得到的是一个数值

(5)矩阵的合并

import numpy as np           #导入NumPy库
if __name__ == "__main__":
    a=np.mat(np.ones((2,2))) #得到2*2全1矩阵
    b= np.mat(np.eye(2))     #得到2*2对角单位矩阵
    c= np.vstack((a,b))      #按列合并,即增加行数,得到4*2矩阵
    d= np.hstack((a,b))      #按行合并,即行数不变,扩展列,得到2*4矩阵

 (6)读取矩阵行列数

import numpy as np             #导入NumPy库
if __name__ == "__main__":
    a=np.shape(np.eye(3))[0]   #读出行数,得到1个数
    b=np.shape(np.eye(3))[1]   #读出列数,得到1个数
    m, n = np.shape(np.eye(3)) #读出行列数,得到2个数

(7)随机数

import numpy as np       #导入NumPy库
import random            #导入随机数random库
if __name__ == "__main__":
    a = random.randint(0,10)               #用于生成一个指定范围内的整数     
    a1 = random.uniform(0,10)              #生成一个指定范围内的随机符点数
    a2 = random.randrange(0, 100, 10)      #从指定范围内,按指定基数递增的集合中 获取一个随机数
    a3 = random.shuffle(["a", "b", "c"] )  #用于将一个列表中的元素打乱
    
    b = np.random.random(size=(2,4))            #生成2*4浮点数随机数组,随机数的值位于0到1之间
    b1 = np.random.randint(1,100,size=(3,3))    #生成3*3整数随机数组,随机数的值位于1到100之间
    b2 = np.random.binomial(5, 0.5, size=(2,3)) #生成2*3二项分布随机数组,一次试验抛5次硬币朝上的硬币数,做2*3次试验

(7)其他矩阵处理方法

import numpy as np                       #导入NumPy库
if __name__ == "__main__":
    a=np.mat([[1,1,7],[2,3,5],[4,2,1]])  #得到的是3*3的矩阵
    a1 = np.mean(a,axis=0)               #参数axis=0表示对矩阵的每一列求均值,得到1*3矩阵
    a2 = np.cov(a,rowvar=0)              #计算协方差矩阵,得到3*3数组
    a3,a4 = np.linalg.eig(a)             #计算矩阵的特征值和特征向量,分别得到3*1数组,3*3矩阵
    a5 = np.argsort(a3)                  #对特征进行排序(升序),函数返回的是原索引值,得到3*1数组

参考文献

[1] http://www.runoob.com/python3/python3-tutorial.html 

[2] https://www.cnblogs.com/chamie/p/4870078.html

 

 

posted @ 2018-12-26 10:56  Andy_George  阅读(633)  评论(0编辑  收藏  举报