tft每日頭條

 > 生活

 > 矩陣乘矩陣的共轭矩陣

矩陣乘矩陣的共轭矩陣

生活 更新时间:2024-06-26 22:10:43

向量是存儲和操作數據的一種有用的方法,可以用箭頭或數字數組來表示它們。然而,創建更複雜的數據結構是有幫助的,這正是需要引入矩陣的地方。

介紹

矩陣是正方形或矩形數組,包含兩個維度:行和列,我們可以把它看作是一個電子表格。通常會在數學上下文中看到術語矩陣,在numpy上下文中看到二維數組。

維度

在矩陣的上下文中,術語維度不同于向量表示的維數(空間維數)。當我們說矩陣是二維數組時,意味着數組中有兩個方向:行和列。

矩陣表示如下:

矩陣乘矩陣的共轭矩陣(矩陣與矩陣乘積簡介)1

矩陣A有兩行兩列,如果矩陣有m行和n列,并且包含實值,可以用以下符号來刻畫它:A∈ℝ(m×n)。

我們可以使用不帶粗體的矩陣名稱引用矩陣中的元素,但是後面需要跟着行索引和列索引。例如,$ A_{2, 1}$表示第一行和第二列中的元素。

按照慣例,第一個索引用于行,第二個索引用于列。例如,上面提到的例子位于矩陣A的第二行和第一列,因此它被表示為$A_{2, 1}$。

矩陣分量可以寫如下:

矩陣乘矩陣的共轭矩陣(矩陣與矩陣乘積簡介)2

圖1:矩陣是二維數組,行數通常用m表示,列數用n表示。

數組的形狀給出了每個維度中元素的數量,如圖1所示。由于此矩陣是二維的(行和列),因此需要兩個值來描述形狀(按此順序排列的行數和列數)。

我們先用這個方法np.array()創建一個2維numpy數組。

A = np.array([[2.1, 7.9, 8.4], [3.0, 4.5, 2.3], [12.2, 6.6, 8.9], [1.8, 1., 8.2]])

注意,我們使用數組中的數組([[]])來創建二維數組。這與創建一維數組的不同之處在于所使用的方括号數。

與向量一樣,可以訪問Numpy數組的shape屬性:

A.shape

可以看到該形狀包含兩個數字:它們分别對應于行數和列數。

要獲得矩陣元素,需要兩個索引:一個引用行索引,一個引用列索引。

使用Numpy,索引過程與向量的索引過程相同,隻需要指定兩個索引。我們再來看下面的矩陣A:

A = np.array([[2.1, 7.9, 8.4], [3.0, 4.5, 2.3], [12.2, 6.6, 8.9], [1.8, 1.3, 8.2]])

可以使用以下語法獲取特定元素:

A[1, 2]

[1,2]返回行索引為1、列索引為2(以零為基礎的索引)的元素。

要獲得完整的列,可以使用冒号:

A[:, 0]

array([ 2.1, 3. , 12.2, 1.8])

這将返回第一列(索引0),因為冒号表示我們需要從第一行到最後一行的元素。同樣,要獲取特定行,可以執行以下操作:

A[1, :]

array([3. , 4.5, 2.3])

能夠操縱包含數據的矩陣是數據科學家的一項基本技能。檢查數據的形狀對于确保數據的組織方式非常重要。了解使用Sklearn或Tensorflow等庫所需的數據形狀也很重要。

對于Numpy,如果數組是向量(1D Numpy數組),則shape是單個數字:

v = np.array([1, 2, 3]) v.shape

如果是矩陣,則形狀有兩個數字(行和列中的值的數目)。例如:

A = np.array([[2.1, 7.9, 8.4]]) A.shape

形狀的第一個數字是1。使用兩個方括号[[和]],可以創建一個二維數組(矩陣)。

矩陣乘積

接下來我們将在數據科學基礎數學中學習乘積。矩陣的等價運算稱為矩陣乘積或矩陣乘法,它接受兩個矩陣并返回另一個矩陣。這是線性代數中的一個核心運算。

矩陣乘積的更簡單的情況是介于矩陣和向量之間(可以将其視為矩陣乘積,其中一個向量隻有一列)。

矩陣乘矩陣的共轭矩陣(矩陣與矩陣乘積簡介)3

上圖說明了矩陣和向量之間乘積的步驟。讓我們來看矩陣的第一行,在向量(值3和4)和行(值1和2)之間進行點積。第一行的第一個值的與第一列的第一個值(1⋅3)和第一行第二個值與第一列的第二個值(2⋅4),它計算的矩陣的第一個元素是(1⋅3 2⋅4 = 11)。

你可以看到矩陣乘積與點積相關,就像把矩陣A分成三行并應用點積(如數據科學的基本數學)。

看看它是如何與numpy一起工作的。

A = np.array([ [1, 2], [5, 6], [7, 8] ]) v = np.array([3, 4]).reshape(-1, 1) A @ v

array([[11], [39], [53]])

請注意,我們使用了reshape函數将向量重塑為一個2乘1的矩陣(-11告訴Numpy猜測剩餘的數字)。如果沒有它,将以一維數組結束,而不是這裡的二維數組(隻有一列的矩陣)。

還有另一種方法來考慮矩陣乘積,可以考慮向量包含了對矩陣的每一列加權的值。它清楚地表明,向量的長度需要等于應用向量的矩陣的列數。

下圖可能有助于将這個概念形象化。可以将向量值(3和4)視為應用于矩陣列的權重。前面看到的标量乘法規則會産生與以前相同的結果。

使用最後一個示例,可以編寫A和v之間的乘積,如下所示:

矩陣乘矩陣的共轭矩陣(矩陣與矩陣乘積簡介)4

這一點很重要,因為正如你在數據科學基礎數學中看到的更多細節,它表明Av是A的列的線性組合,系數是v的值。

另外,你可以看到矩陣的形狀和向量的形狀必須匹配才能得到乘積。

矩陣乘積類似于矩陣向量積,但應用于第二個矩陣的每一列。

使用Numpy,可以精确地計算矩陣乘積:

A = np.array([ [1, 2], [5, 6], [7, 8], ]) B = np.array([ [3, 9], [4, 0] ]) A @ B

array([[11, 9], [39, 45], [53, 63]])

與矩陣向量積一樣,第一個矩陣的列數必須與第二個矩陣的行數相匹配。

結果矩陣的行數與第一個矩陣的行數相同,列數與第二個矩陣的列數相同。

我們試試吧。

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

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

矩陣A和B有不同的形狀。讓我們計算他們的乘積:

A @ B

array([[ 9, 24, 15], [12, 33, 24], [15, 42, 33]])

你可以看到A⋅B的結果是一個3乘3的矩陣。這個形狀來自A(3)的行數和B(3)的列數。

可以使用矩陣與其轉置矩陣之間的乘積計算數據集的協方差矩陣,然後除以觀測值(或貝塞爾修正值減去1),但是需要事先确保變量的中心在零左右(這可以通過減去平均值來實現)。

讓我們模拟以下變量x、y和z:

x = np.random.normal(10, 2, 100) y = x * 1.5 np.random.normal(25, 5, 100) z = x * 2 np.random.normal(0, 1, 100)

使用Numpy,協方差矩陣為:

np.cov([x, y, z])

array([[ 4.0387007 , 4.7760502 , 8.03240398], [ 4.7760502 , 32.90550824, 9.14610037], [ 8.03240398, 9.14610037, 16.99386265]])

現在,使用矩陣乘積,首先進行堆疊:

X = np.vstack([x, y, z]).T X.shape

你可以看到變量X是一個100×3的矩陣:100行對應于觀察值,3列對應于特征。然後,把這個矩陣減去均值:

X = X - X.mean(axis=0)

最後,計算協方差矩陣:

(X.T @ X) / (X.shape[0] - 1)

array([[ 4.0387007 , 4.7760502 , 8.03240398], [ 4.7760502 , 32.90550824, 9.14610037], [ 8.03240398, 9.14610037, 16.99386265]])

你會得到一個協方差矩陣,與函數np.cov中得到的協方差矩陣相似,這一點很重要,要記住一個矩陣的轉置乘積對應于協方差矩陣。

兩個矩陣之間乘積的轉置定義如下:

矩陣乘矩陣的共轭矩陣(矩陣與矩陣乘積簡介)5

例如,取以下矩陣A和B:

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

你可以檢查(AB)^T和B^T A^T的結果:

(A @ B).T

array([[ 9, 12, 15], [24, 33, 42], [15, 24, 33]])

B.T @ A.T

array([[ 9, 12, 15], [24, 33, 42], [15, 24, 33]])

兩個向量或矩陣在括号中的順序必須改變,以滿足等價性。如果改變向量和矩陣的順序,矩陣乘積的轉置等于轉置的乘積。

可以将此屬性應用于兩個以上的矩陣或向量,例如這樣。

矩陣乘矩陣的共轭矩陣(矩陣與矩陣乘積簡介)6

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved