矩阵相关计算-基础
# import numpy as np #引入numpy库 import numpy.linalg as lg ##导入numpy.linalg 求矩阵的逆 ##创建矩阵 #创建一维narray对象 narray_1d = np.array([1,2,3,4,5]) #创建二维narray对象 narray_2d = np.array([[1,2,3,4,5],[6,7,8,9,10]]) #创建三维方阵 narray_3d = np.array([[1,2,3],[4,5,6],[7,8,9]]) ##通过arange() 函数创建矩阵 b1 = np.arange(10) #默认从0开始到10(不包括10),默认步长1 [0 1 2 3 4 5 6 7 8 9] b2 = np.arange(5,10) #从5开始到10 ,默认步长1 [5 6 7 8 9] b3 = np.arange(5,20,2) #从5到20,步长2 [ 5 7 9 11 13 15 17 19] print(b1) print(b2) print(b3) ##linspace()创建等差数列(线性等分向量) c = np.linspace(0,10,5)#生成首位是0,末位是10,含5个数的等差数列[ 0. 2.5 5. 7.5 10. ] print(c) ##logspace()创建等比数列 以10为底,(起始次方,终止次方,创建个数) d = np.logspace(0,2,5) #[ 1. 3.16227766 10. 31.6227766 100. ] print(d) ##ones创建全是1的矩阵 e1 = np.ones((3,4)) print(e1) ''' [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] ''' ##zeros创建全是0的矩阵 e2 = np.zeros((3,4)) print(e2) ''' [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] ''' ##eye创建单位矩阵 e3 = np.eye(3) print(e3) ''' [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ''' ##empty创建空矩阵(实际有值) e_empty = np.empty((3,4)) print(e_empty) ''' [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] ''' ##fromstring()方法可以将字符串转化成ndarray对象,获得字符串的ASCII序列 # str = 'abdcf' # str_array = np.fromstring(str,dtype=np.int8) #因为一个字符8位,所以指定dtype=np.int8 # print(str_array) #[ 97 98 100 99 102] ##fromfunctin()根据矩阵的行号列号生成矩阵元素 def func(i,j): return i+j fr_func_array = np.fromfunction(func,(5,6)) print(fr_func_array) ''' [[0. 1. 2. 3. 4. 5.] [1. 2. 3. 4. 5. 6.] [2. 3. 4. 5. 6. 7.] [3. 4. 5. 6. 7. 8.] [4. 5. 6. 7. 8. 9.]] ''' ##获取矩阵的行数列数 print(narray_3d.shape) #结果返回一个tuple (3, 3) ##获取行数 print(narray_3d.shape[0]) #返回行数 3 print(narray_3d.shape[1]) #返回列数 3 ##矩阵截取 #截取第一行 print(narray_3d[0:1]) #[[1 2 3]] #截取第二行,第二,三列 print(narray_3d[1,1:3]) #截取第二行 print(narray_3d[1,:]) #按条件截取 #截取矩阵中大于2的元素,返回一维数组 print(narray_3d[narray_3d>2]) #[3 4 5 6 7 8 9] #布尔语句首先生成布尔矩阵,将布尔矩阵传入[]实现截取 print(narray_3d>3) ''' [[False False False] [ True True True] [ True True True]]''' #满足条件就替换 narray_3d[narray_3d>3] = 10 print(narray_3d) ''' [[ 1 2 3] [10 10 10] [10 10 10]]''' #矩阵的合并,以列表或元祖形式传入 a1 = np.array([[1,2],[3,4]]) a2 = np.array([[5,6],[7,8]]) #横向合并 print(np.hstack([a1,a2])) ''' [[1 2 5 6] [3 4 7 8]] ''' #纵向合并 print(np.vstack([a1,a2])) ''' [[1 2] [3 4] [5 6] [7 8]] ''' ##矩阵的运算 #对应元素操作 相加+ 相减- 相乘* 相除/ 相除取余% 每个元素次方** ##常见矩阵函数 #对每个元素操作 三角函数: #np.sin(a) np.cos(a) np.tan(a) np.arcsin(a) np.arccos(a) np.arctan(a) ##每个元素取指数函数 np.exp(a) ##每个元素开根号 np.sqrt(a) ##当矩阵元素不在定义与范围时:RuntimeWarning 结果为nan(not a number) ##矩阵运算 #1.矩阵乘法(点乘) g1 = np.array([[1,2,3],[4,5,6]]) g2 = np.array([[1,2],[3,4],[5,6]]) print(g1.shape[1]==g2.shape[0]) ##True,满足矩阵乘法条件 #矩阵点乘np.dot() print(g1.dot(g2)) ''' True [[22 28] [49 64]] ''' #矩阵转置np.transpose() print(g1.transpose()) ''' [[1 4] [2 5] [3 6]] ''' #简单方法 print(g1.T) ''' [[1 4] [2 5] [3 6]] ''' #矩阵的逆 需先导入numpy.linalg 用linalg的inv函数来求逆 求逆条件,行数=列数 mitr1 = np.array([[0,1,1],[1,1,1],[1,1,0]]) #求逆 print(lg.inv(mitr1)) ''' [[-1. 1. 0.] [ 1. -1. 1.] [-0. 1. -1.]] ''' #奇异矩阵无法求逆 mitr2 = np.array([[0,1,1],[1,1,1],[1,0,0]]) #奇异矩阵:Singular matrix print(lg.inv(mitr2)) ##初等行变换不能将矩阵化成单位矩阵 ''' [[1. 0. 0. 0. 0. 1.] [0. 1. 1. 0. 1. -1.] [0. 0. 0. 1. -1. 1.]] ''' ##求解矩阵Ax=b A = np.mat('1 1 ;0 1') #生成一个矩阵A b = np.array([2,1]) x = np.linalg.solve(A,b) print(A) print(b) print(x) ##求矩阵的特征值特征向量eig eigvalue,eigvector=np.linalg.eig(A) print('特征值:',eigvalue,'特征向量 :',eigvector) ##矩阵信息获取 ##最大最小值.max() .min() B = np.random.random((5,4)) print(B) print('B数组最大元素:',B.max()) print('B数组最小元素:',B.min()) print('B数组每列最大元素:',B.max(axis=0)) print('B数组每行最小元素:',B.min(axis=1)) print('B数组最大元素所在位置(按行遍历):',B.argmax(axis=1)) ##矩阵中元素的平均值mean(),也可获得行列的平均值 print(B.mean()) print(B.mean(axis=0)) #按列取平均值 print(B.mean(axis=1)) #按行取平均值 ##矩阵元素的方差函数var(),相当于mean(abs(x-x.mean()**2)) print(B.var()) #所有元素的方差 print(B.var(axis=0)) #每列元素的方差 print(B.var(axis=1)) #每行元素的方差 ##标准差std() 相当于 sqrt(mean(abs(x-x.mean()**2))) 或 sqrt(B.var()) print(B.std()) #所有元素的标准差 print(B.std(axis=0)) #每列元素的标准差 print(B.std(axis=1)) #每行元素的标准差 ##中值median():将序列排序,奇数个取中间值,偶数个取中间两值的均值 print(np.median(B)) #取所有值中值 print(np.median(B,axis=0)) #沿列方向取中值 print(np.median(B,axis=1)) #沿行方向取中值 ##求和sum() :对行,列,或整个矩阵求和 print(B.sum()) #对整矩阵求和 print(B.sum(axis=0)) #对列求和 print(B.sum(axis=1)) #对行求和 ##累计和sumsum():当前位置之前的所有元素之和。如:[1,2,3,4,5],其累计和为[1,3,6,10,15] ##同理可对行列 整个矩阵累积和 print(B.cumsum()) #对整个矩阵累积和 print(B.cumsum(axis=0)) #列累积和 print(B.cumsum(axis=1)) #行累积和
参考:https://www.cnblogs.com/smallpi/p/4550361.html