numpy的使用
#接上面 print(A.T) #转置 Y = matrix('5.0 7.0') Y = Y.T print(A*Y) #乘法 print(A.I) #逆矩阵 print(solve(A, Y)) #解线性方程
数组:
numpy中提供了ndarry数组对象,该对象不但能方便地存储数组,而且拥有丰富的数组计算函数,比如向量的加法,减法,乘法等。
创建数组。通过使用array()函数来定义数组实例对象,其参数为Python的序列对象(比如列表)。如果想定义多为数组,则传递多层嵌套的序列。如:
定义一个维维数组,其大小为(2,3),即共有两行,每行三列。
import numpy as np a = np.array([1, 7, 0],[-2, 1, 2])
形成的数组如下:
1 | 7 | 0 |
-2 | 1 | 2 |
np.ndim 数组的维度数
np.shape 数组的维数
np.size 数组的总数
np.dtype 数组元素的类型
np.itemsize 数组元素中每个元素占有的字节大小
np.data 数组元素的缓存区
import numpy as np a = np.array([[1., 7., 0.], [-2., 1., 2.]]) print('维度数==>', a.ndim) #数组的维度数 print('维数==>', a.shape) #数组的维数 print('总数==>', a.size) #数组元素的总数 print('类型==>',a.dtype) #数组的类型 print('每个元素占有的字节大小==>', a.itemsize) #数组中每个元素占有的字节大小 print('缓存区==>', a.data) #数组元素的缓存区 #结果 #维度数==> 2 #维数==> (2, 3) #总数==> 6 #类型==> float64 #每个元素占有的字节大小==> 8 #缓存区==> <memory at 0x0000000002151C88>
特殊数组:
zeros数组: 全零数组,元素全为0,使用zeros函数创建
ones数组: 全一数组,元素全为1,使用ones函数创建
empty数组: 空数组,元素全近似为零,使用空数组的创建方法
序列数组:
使用linspace函数创建等差序列数组,其参数分别为起始值,终止值,元素数量。
import numpy as np order = np.linspace(0, 2, 9) # 结果 [0. 0.25 0.5 0.75 1. 1.25 1.5 1.75 2. ]
数组索引:
Numpy数组的每个元素,每行元素,每列元素都可以使用索引访问,不过要注意索引是从0开始的。比如,某数组大小为(2,3),则每第2行第1列元素的索引是[1,0]。下面以三维数组位列,演示数组的创建,输出即索引。
from numpy import * c = arange(24).reshape(2,3,4) print(c) ''' [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] ''' print(c[1,2,:]) # [20 21 22 23]
数组运算:
数组的加减乘除以及乘法运算方式为,相应位置的元素分别进行计算。
加法:array([20,31,42,53]) = array([20,30,40,50]) + array([0,1,2,3])
减法:array([20,29,38,47]) = array([20,30,40,50]) - array([0,1,2,3])
乘法:array([2,0],[0,4]) = array([[1,1],[0,1]]) * array([[2,0],[3,4]])
乘方:array([0,1,2,3])的二次方 = array([0,1,4,9])
除法:array([20,15,13.33333333.12.5]) = array([20,30,40,50])/array([1,2,3,4])
数组拷贝:
数组的拷贝分为浅拷贝和深拷贝两种,浅拷贝通过数组变量的赋值完成,深拷贝使用欧冠数组对象的copy方法。
浅拷贝只拷贝数组的引用,如果对拷贝进行修改,原数组也将修改。:
from numpy import * a = ones((2,3)) b = a b[1, 2] = 2 print(a) print(b) ''' [[1. 1. 1.] [1. 1. 2.]] [[1. 1. 1.] [1. 1. 2.]] '''
深拷贝会复制一份和原数组一样的数组,新数组与原数组不会存放在用一个内存位置中,因此,对新数组的修改不会影响原数组。下面的代码演示了b使用copy方法从原数组a复制一份拷贝的情况。可以看到,修改b后,a仍然不变。
from numpy import * a = ones((2,3)) b = a.copy() b[1,2] = 2 print(a) print(b) ''' [[1. 1. 1.] [1. 1. 1.]] [[1. 1. 1.] [1. 1. 2.]] '''
矩阵;
创建矩阵。Numpy的矩阵对象与数组对象相似,主要不同之处在于,矩阵对象的计算遵循矩阵数学运算规律。矩阵使用matrix函数创建,以(2,2)大小的矩阵(2行2列)为例,可用一下两种方式定义参数:
from numpy import * A = matrix('1.0 2.0; 3.0 4.0') print(A) B = matrix([[1.0, 2.0],[3.0, 4.0]]) print(B) ''' [[1. 2.] [3. 4.]] [[1. 2.] [3. 4.]] '''
矩阵运算。矩阵的床用数学运算有转置,乘法,求逆等。
#接上面 print(A.T) #转置 Y = matrix('5.0 7.0') Y = Y.T print(A*Y) #乘法 print(A.I) #逆矩阵 print(np.linalg.solve(A, Y)) #解线性方程