numpy是python中用于支持科学计算的第三方库。支持各种矩阵运算。
因为有了numpy,矩阵轮和线性代数里面的各种复杂计算变得直观、简便。
python中试用numpy的方式为:import numpy / import numpy as np,后者使用频率更高一些。
numpy中定义了自己的数据结构 array 和 matrix。
1、生成array:
import numpy as np #生成一个array >>> a = [1,2,3,4] >>> a = numpy.array(a) >>> a array([1, 2, 3, 4]) >>>a = np.arange(1,7) >>> a array([1, 2, 3, 4, 5, 6])
2、查看array的属性
>>> a = np.arange(1,7) >>> a array([1, 2, 3, 4, 5, 6]) >>> a.shape #a的规模 (6,) >>> a.size #a的规模 6 >>> a.max() #a的最大值 6 >>> a.min() #a的最大值 1 >>> a.mean() #a的平均值 3.5 #array的切片,同python >>> a = a.reshape(3,3) >>> a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> a[:,1] array([2, 5, 8]) >>> a[1,:] array([4, 5, 6]) >>> a = array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]) >>> a = a.reshape(2,3,3) >>> a array([[[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]]) >>> a[0,:,1] array([2, 5, 8]) >>> a[1,2,2] 18 >>> a[:,:,1] array([[ 2, 5, 8], [11, 14, 17]])
3、array的修改
#array的分解: #reshape(m,n) 重新定义array的大小 >>> a = np.arange(1,10) >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = a.reshape(3,3) >>> b array([[1, 2, 3], #3行3列 [4, 5, 6], [7, 8, 9]]) #array的合并: #flatten()函数可以将多维的矩阵转换为一维矩阵 >>> b.flatten() array([1, 2, 3, 4, 5, 6, 7, 8, 9]) #一维矩阵 #array的拆分: #split(a,n)函数,把a拆分为等长n个array >>> a array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> b = np.split(a,3) #把a拆分为等长度的3个array,返回值为一个list,list中存贮拆分后的三个list >>> b [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])] #split(a,[m,n])函数,把a在m,n出进行拆分,得到3个array的list >>> a = array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> c = np.split(a,[4,7]) >>> c [array([1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])] #array的合并:ravel(), 展开一个可以解析的结构为1维数组 >>> d = np.ravel(c) >>> d array([array([1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])], dtype=object) >>> d[0] array([1, 2, 3, 4]) >>> d[3] Traceback (most recent call last): File "<pyshell#30>", line 1, in <module> d[3] IndexError: index 3 is out of bounds for axis 0 with size 3 # 合并ravel()函数的结果 >>> d = np.ravel(c) >>> d array([array([1, 2, 3, 4]), array([5, 6, 7]), array([8, 9])], dtype=object) >>> e = np.hstack(d) >>> e array([1, 2, 3, 4, 5, 6, 7, 8, 9])
4、array的扩展
#数组组合,即用一个数组去扩展另一个数组 >>> a = np.eye(2,2) >>> a array([[ 1., 0.], [ 0., 1.]]) >>> b = 2*a >>> b array([[ 2., 0.], [ 0., 2.]]) #横向扩展 hstack() >>> c = np.hstack((a,b)) >>> c array([[ 1., 0., 2., 0.], [ 0., 1., 0., 2.]]) #纵向扩展 vstack() >>> c = np.vstack((a,b)) >>> c array([[ 1., 0.], [ 0., 1.], [ 2., 0.], [ 0., 2.]]) #扩展 stack(), 相当于给矩阵增加维度 >>> c = np.stack((a,b)) >>> c array([[[ 1., 0.], [ 0., 1.]], [[ 2., 0.], [ 0., 2.]]])
5、文件的读写
numpy可以直接操作txt、csv等格式的文档,对其中数据进行读写
#读数据 x,y,z = numpy.loadtxt(filepath, delimiter='\n', usecols=(6,7,8), dtype=float) #即把filepath文件的6,7,8列按float读进来,赋值给x.y,z,其中分隔符是‘\n’, #写数据 numpy.savetxt(filepath, a, fmt='%s, %s, %s', newline='\n') #将数据a写进filepath文件中,写入的格式可以在fmt里面选%s、%f等,根据占用列数来设置fmt中的格式化字符串标志数量
6、matrix
>>> a = np.mat('1 2 3;4 5 6;7 8 9') >>> a matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> b array([[ 2., 0.], [ 0., 2.]]) >>> a = np.mat(b) >>> a matrix([[ 2., 0.], [ 0., 2.]]) >>> a[0,0] = 1 >>> a[0,1] = 2 >>> a[1,0] = 3 >>> a[1,1] = 4
#a的转置 >>> a.T matrix([[ 1., 3.], [ 2., 4.]])
#a的逆阵 >>> a.I matrix([[-2. , 1. ], [ 1.5, -0.5]])
7、numpy的linalg(线性代数)模块
>>> a matrix([[ 1., 2.], [ 3., 4.]]) #计算逆阵 >>> b = np.linalg.inv(a) >>> b array([[-2. , 1. ], [ 1.5, -0.5]]) #求解线性方程组 Bx = b B = np.mat("1 -2 1; 0 2 -8; -4 5 9") b = np.array([0,8,9]) x = np.linalg.solve(B,b) >>> x array([ 155., 88., 21.]) #特征值和特征向量 B = np.mat("1 -2 1; 0 2 -8; -4 5 9") y,z = np.linalg.eig(B) #y为特征值、z为特征向量
行万里路,不忘初心!