Python與線性代數基本概念

在Python中使用Numpy建立向量:ide

x = np.array([1, 2, 3, 4])

建立3 x 3矩陣函數

B = np.array([[1, 2],[3, 4],[5, 6]])

Shape形狀,也可稱爲維度,表示矩陣中每一個維度的具體數值;spa

B.shape 3 x 2

轉置

行向量可轉置爲列向量,列向量轉置爲行向量
如爲方陣轉置後行數列數不變,對於非方陣,2 x 3矩陣轉置後爲3 x 2矩陣code

B_t = A.T

檢查轉置後形狀shapeorm

B_t.shape

矩陣加法

矩陣相加爲兩個矩陣對應的元素相加;it

A = np.array([1,2],[3,4])
 B = np.array([4,5],[5,6])
 C = A + B = [[5, 7],[8, 10]]

如標量與矩陣相加規則爲:標量與矩陣中對應的每一個元素相加;class

廣播

  廣播爲Numpy的機制,使得Numpy能夠處理各個不一樣形狀(shape)之間的操做,較小的陣列將會被擴充以匹配較大的陣列形狀;
  就如上面使用標量與矩陣作相加元素,實際上Numpy把標量轉成了與矩陣相同維度的矩陣與該矩陣進行相加;
  好比一個3 x 2 矩陣與一個3 x 1矩陣相加,Numpy會自動把3 x 1矩陣複製一列造成3 x2矩陣與該3 x 2矩陣相加,使得兩個矩陣的shape可以匹配;lambda

矩陣乘法

  矩陣乘法與矩陣加法規則並不同,不是兩個矩陣對應的元素相乘,而是計算矩陣行與列對應元素乘積之和;也稱爲點積;
  矩陣乘法是否有定義,前一個矩陣的列數必須等於後一個矩陣的行數;如n x p與p x m兩個矩陣相乘結果爲n x m矩陣;
  兩個矩陣相乘能夠看做是第一個矩陣的每一行與第二個矩陣的每一列之間的點積;
能夠使用Numpy的dot()函數計算兩個矩陣的乘積;di

A = [[2, 3],[3, 4]]
 B = [[1, 1],[3, 4]]
 C = np.dot(A, B)
 也能夠使用 C =A.dot(B)

線性方程組

線性方程組爲線性代數用來解決的重要問題之一,co

x1 – 2*x2+x3 = 0
 2*x2 - 8*x3 = 8
    -4*x1 + 5*x2 + 9*x3 = -9

矩陣B每行爲上述方程的常數,A矩陣每行爲方程組中的每一個方程係數;

A = np.array([[1 ,-2 ,1],[0 ,2 ,-8],[-4 ,5 9]])
 B = np.array([0 ,8 ,-9])

 Y= np.linalg.solve(A,B)= [29. 16.  3.]

單位矩陣

任何向量與單位矩陣相乘結果爲他自己,單位矩陣:全部沿主對角線元素都是1,而其餘全部位置元素都爲0;

np.identity(5)

逆矩陣

A爲方陣,存在矩陣B使得AB=BA=I,I爲單位矩陣,則稱B爲的逆矩陣;

對於Ax=b有

A = np.array([[2, 3], [4,5]])

 A逆矩陣A_inv= np.linalg.inv( A )
 I = A_inv.dot( A )

行列式

A = np.array([1 ,2 ],[4 ,5 ])
 D = np.linalg.det(A)

範數

0範數 向量中非零元素個數

x = np.array([1, 0, -5])
 n = np.linalg.norm(x, ord = 0)

1範數 向量中全部元素絕對值之和

x = np.array([3, 0, -4])
 n1 = np.linalg.norm(x, ord = 1)

2範數 向量各個元素平方和求平凡根

x = np.array([3, 0, -4])
 n2 = np.linalg.norm(x, ord = 2)

矩陣的範數

1範數 又稱列範數,矩陣列向量中絕對值之和的最大值;

x = np.array([[-1, 1, 0],[-4, 3, 0],[1, 0, 1]])
 n1 = np.linalg.norm(x, ord = 1)

2範數 又稱譜範數,A_t A 矩陣的最大特徵值的開平方

a = np.array([[-2, 1, 1],[-4, 3, 0],[1, 0, 2]])
 ata = np.matmul(a.T, a)
 print ("lambda  ", np.linalg.eigvals(ata))
 n2 = np.linalg.norm(a, ord = 2)
 print('norm_2  ', n2, np.sqrt(30.55403188))

F範數,Frobenius範數,計算方式爲矩陣元素的絕對值的平方和再開方。

x = np.array([[-1, 2, 0],[-4, 3, 0],[1, 0, 2]])
 nfro = np.linalg.norm(x, ord = 'fro')

∞範數,又稱行和範數, 即矩陣行向量中絕對值之和的最大值。

x = np.array([[-1, 2, 0],[-4, 3, 0],[1, 0, 2]])
 ninf = np.linalg.norm(x, ord = np.inf)
相關文章
相關標籤/搜索