张量与多重线性代数

作为多维数组的张量

一旦固定了基,张量就变成一个由若干下标索引的多维数字数组:向量是 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