張量與多重線性代數

作為多維陣列的張量

一旦固定了基,張量就變成一個由若干下標索引的多維數字陣列:向量是 1 維陣列(一個列表),矩陣是 2 維陣列(一個網格),而三階張量 T[i,j,k] 是一個數字立方體。這就是資料科學的圖像,是 NumPy 或 PyTorch 這類軟體背後的那一個,其中「張量」就是指「n 維陣列」。

相應的詞彙命名了你如何切這個立方體。模(或路)是其中一個軸;三階張量有三個模。纖維是你固定除一個以外全部指標所得到的東西——矩陣的列與行的高階類比(一行是一條 1 模纖維)。切片固定一個指標、讓另兩個跑動,給出立方體的一張矩陣面。

重整形運算在這些視角間移動。展開(矩陣化)通過堆疊纖維把張量攤平成矩陣,讓你能逐模套用普通的矩陣工具。向量化把一切堆成一根長行。這些都是記帳,不是新數學,但 CP 與 Tucker 之類的分解正是這樣被實際計算出來的。

對陣列視角所丟棄的東西要誠實。光禿禿的陣列只是座標;只有當你同時說明各元素在換基下如何變換,它才成為真正的張量。一個沒有變換律的 NumPy 陣列並非物理意義上的張量——它是一個容器。無座標對象與它的分量陣列之間的關係,正如抽象向量與它那一行數字之間的關係。

T[i, j, k] with i in 1..I, j in 1..J, k in 1..K => I*J*K entries (a 3-way array)

三階張量是一個數字立方體;它的模就是三個軸 i、j、k。

儲存量隨各模尺寸之積而增長:一個 n x n x n 張量存 n^3 個數。這種維數災難正是低秩張量格式(CP、Tucker、張量列)之所以重要的原因——它們存的數遠少於原始立方體。

又稱
multiway arrayN-way arraydata tensor