numpy基础(part9)--矩阵
生活随笔
收集整理的這篇文章主要介紹了
numpy基础(part9)--矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鄙人學習筆記,這個筆記以例子為主。
開發工具:Spyder
文章目錄
- 矩陣
- 矩陣對象的創建
- 矩陣的乘法運算
- 矩陣的逆運算
- 多維數組的矩陣運算
- 案例
矩陣
矩陣是numpy.matrix類的對象,該類繼承自numpy.ndarray,任何針對多維數組的操作,對矩陣同樣有效,但作為子類矩陣又結合其自身的特點,做了必要的擴充,比如:乘法計算、求逆。
矩陣對象的創建
①創建方法1
- 語法
備注:默認選項(c),又稱缺省值,是一種計算機術語,指在無決策者干預情況下,對于決策或應用軟件、計算機程序的系統參數的自動選擇。
- 舉個例子
代碼1:
import numpy as np ary = np.arange(1, 10).reshape(3, 3) m = np.matrix(ary, copy=True) print(m, type(m)) ary[0, 0] = 999 print(m, type(m))結果1:
[[1 2 3][4 5 6][7 8 9]] <class 'numpy.matrixlib.defmatrix.matrix'> [[1 2 3][4 5 6][7 8 9]] <class 'numpy.matrixlib.defmatrix.matrix'>代碼2:
import numpy as np ary = np.arange(1, 10).reshape(3, 3) m = np.matrix(ary, copy = False) print(m, type(m)) ary[0, 0] = 999 print(m, type(m))結果2:
[[1 2 3][4 5 6][7 8 9]] <class 'numpy.matrixlib.defmatrix.matrix'> [[999 2 3][ 4 5 6][ 7 8 9]] <class 'numpy.matrixlib.defmatrix.matrix'>②創建方法2
- 語法
- 例子
代碼:
import numpy as np ary = np.arange(1, 10).reshape(3, 3)ary02 = np.mat(ary) print(ary02, type(ary02)) ary03 = np.mat('1 2 3;4 5 6') print(ary03, type(ary03))結果:
[[1 2 3][4 5 6][7 8 9]] <class 'numpy.matrixlib.defmatrix.matrix'> [[1 2 3][4 5 6]] <class 'numpy.matrixlib.defmatrix.matrix'>矩陣的乘法運算
- 語法
- 例子
代碼:
import numpy as np ary = np.arange(1, 10).reshape(3, 3)#數組相乘 print(ary*ary) #矩陣相乘 print(np.mat(ary)*np.mat(ary))結果:
[[ 1 4 9][16 25 36][49 64 81]] [[ 30 36 42][ 66 81 96][102 126 150]]矩陣的逆運算
若兩個矩陣A、B滿足:AB = BA = E (E為單位矩陣),則稱B和A互為對方的逆矩陣。
- 語法
- 例子
代碼:
import numpy as npa = np.mat('2 0 0;0 3 0; 0 0 4')#原矩陣 print(a) #矩陣的逆 print(a.I) #矩陣相乘 print(a*a.I)結果:
[[2 0 0][0 3 0][0 0 4]] [[ 0.5 0. -0. ][ 0. 0.33333333 -0. ][ 0. 0. 0.25 ]] [[ 1. 0. 0.][ 0. 1. 0.][ 0. 0. 1.]]備注1:若矩陣A沒有逆矩陣,則有些numpy版本會報錯,有些則不會,需要注意。若A不為方陣,則會求出廣義逆矩陣。
備注2:np.linalg.inv(A)也可以求逆矩陣,但A必須為方陣。若A不為方陣,則會報錯。
多維數組的矩陣運算
ndarray提供了方法對多維數組進行矩陣運算。
- 語法
- 例子
代碼:
import numpy as npa = np.array([[2, 0, 1], [0, 4, 0],[1, 0, 5]])#原矩陣 print(a) #矩陣相乘 print(a.dot(a)) #矩陣的逆 print(np.linalg.inv(a))結果:
[[2 0 1][0 4 0][1 0 5]] [[ 5 0 7][ 0 16 0][ 7 0 26]] [[ 0.55555556 0. -0.11111111][ 0. 0.25 0. ][-0.11111111 0. 0.22222222]]案例
求方程組:
中x, y ,z分別為多少?
計算方法1:
import numpy as npa = np.array([[1, 3, 5], [2, 1, 6],[1, 1, 2]])b = np.array([[1], [2], [3]])inv_a = np.linalg.inv(a) print(inv_a.dot(b))結果1:
[[ 4.71428571][ 1.14285714][-1.42857143]]計算方法2:
import numpy as npa = np.mat([[1, 3, 5], [2, 1, 6],[1, 1, 2]])b = np.mat([[1], [2], [3]])#print(a, type(a)) #print(b, type(b)) print(a.I*b)結果2:
[[ 4.71428571][ 1.14285714][-1.42857143]]計算方法3(最小二乘法,求誤差最小的一組):
import numpy as npA = np.mat('1 3 5;2 1 6;1 1 2') B = np.mat('1;2;3') X = np.linalg.lstsq(A, B)print(X) print('---------------') print(X[0])結果3:
(matrix([[ 4.71428571],[ 1.14285714],[-1.42857143]]), matrix([], shape=(1, 0), dtype=float64), 3, array([ 8.88272389, 1.69756102, 0.46422282])) --------------- [[ 4.71428571][ 1.14285714][-1.42857143]]計算方法4(求唯一解):
import numpy as npA = np.mat('1 3 5;2 1 6;1 1 2') B = np.mat('1;2;3') X = np.linalg.solve(A, B)print(X)結果4:
[[ 4.71428571][ 1.14285714][-1.42857143]]總結
以上是生活随笔為你收集整理的numpy基础(part9)--矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恐怖游戏《失忆症:地堡》第三次跳票:修复
- 下一篇: 6死20余伤!广州宝马X3撞人案动机公开