淺談張量分解(四):外積、Kronecker積和張量積
在維基百科上,外積(Outer product - Wikipedia)被解釋為:
In linear algebra, an outer product is the tensor product of two coordinate vectors, a special case of the Kronecker product of matrices.
雖然這個解釋很簡明,但當我們看完這段話後,可能會產生以下兩點疑問:
- 為什麼外積能被認為是Kronecker積的特例呢?
- 外積與張量積(tensor product)有什麼關係?
圍繞這兩點疑問,我們來討論一下容易混淆的外積、Kronecker積和張量積。
1 Kronecker積
在之前的淺談張量分解(二):張量分解的數學基礎一文中,我們已經知道了Kronecker積的運算規則,給定一個大小為的矩陣和一個大小為的矩陣,則矩陣和矩陣的Kronecker積為
很明顯,矩陣的大小為,即行數為,列數為,符號「」表示Kronecker積。當給定兩個向量,如,時,我們可以很輕鬆地計算出Kronecker積為。
import numpy as npa = np.array([[1], [2]])b = np.array([[3], [4]])np.kron(a, b)np.outer(a, b)np.kron(a, b.T)
然而,向量的外積卻為,是一個大小為的矩陣。我們發現Kronecker積與外積並不相同。Kronecker product and outer product confusion認為這種不一致是由符號的「濫用」造成的。
不妨將Kronecker積的符號記作,外積的符號記作(註:一般用符號 表示),則有
.
雖然嚴格意義上的Kronecker積的計算結果和外積的不同,但這種不同僅僅體現在每個元素的擺放位置不同,而且等價於,確實可以用來計算外積。若給定向量 , 和 ,則它們外積為
.
因此,我們依然可以認為外積是Kronecker積的特例。
2 張量積
簡單來說,張量積的定義為:給定兩個有限維的向量空間(finite dimensional vector space)和,其中,為向量空間的基(basis),為向量空間的基,則我們可以將定義為個的線性組合,即
.
同時,雙線性映射(bilinear map,如果僅僅關注張量積的計算,則不必深究這個概念)被定義為
其中,,對於任意取自向量空間和下的向量,我們都可以用相應的基進行線性組合來表示出來,若為向量線性組合的係數,為向量線性組合的係數,則滿足。另外,表示兩個向量空間的Cartesian積(維基鏈接:Cartesian product)。
為了便於理解,這裡舉一個簡單的例子(來源:Calculate the tensor product of two vectors)。
已知下的一組標準基為,,下的一組標準基為,,。給定向量,向量,則向量的張量積為
其中,是的基,張量積與外積的計算結果完全相同。
import numpy as npx = np.array([[1], [1]])y = np.array([[1], [-2], [1]])np.kron(x, y.T)np.outer(x, y)
對於任意向量,,它們的張量積有時被稱為外積,如果是的基,且, 是標準基,則外積可以寫成如下形式:
其中,是矩陣第行、第列的元素。
對於向量而言,張量積和外積是等價的。
3 推薦閱讀:秩一(rank one)矩陣和外積的聯繫
在矩陣分解和張量分解中,我們總不免見到rank one這個詞,另外,我們也知道「秩一」與向量的外積密切相關,因此,對秩一矩陣和外積的聯繫感興趣的讀者可閱讀Rank of a Decomposable Tensor和Is there meaning for uv^T?上的回答。
附錄——張量積的性質:
(1) , ;
(2) .
推薦閱讀: