张量

张量是向量和矩阵的推广. 在 Wolfram 系统中,张量被表示为嵌套到一定次数的列表的集合,嵌套次数称为张量的秩.

0 阶标量
1 阶向量
2 阶矩阵
kk 阶张量

嵌套列表的解释.

阶为 k 的张量实际上是一个 k 维值表. 张量的阶为 k 的条件是能够将表中的元素列为一个 k 维立方阵列,没有空洞和鼓包.

指明张量中特定元素的指标相应于立方体的坐标. 张量的维数相应于立方体的边长.

产生 k 阶张量的一个简单方法是给出 k 个变量的函数的值表. 在物理学中出现的张量具有指出空间或时空方向的指标. 注意,在 Wolfram 系统中,没有共变和协变张量指标的概念. 用户须使用度量张量来建立这些概念.

Table[f,{i1,n1},{i2,n2},,{ik,nk}]
建立一个 ××× 张量,其元素是 f 的值
Array[a,{n1,n2,,nk}]建立一个 ××× 张量其元素通过把 a 用于每个指标集合给出
ArrayQ[t,n]检验是否 t 是一个 n 阶张量
Dimensions[t]给出张量的维数的列表
ArrayDepth[t]求张量的阶
MatrixForm[t]以两维阵列的形式排列张量 t 的元素

建立和检验张量结构的函数.

这是一个 2×3×2 张量.
In[1]:=
Click for copyable input
Out[1]=
这里用另一方法产生同一张量.
In[2]:=
Click for copyable input
Out[2]=
MatrixForm 用二维阵列显示张量的元素. 可以把它看作是一个列向量的 2×3 矩阵.
In[3]:=
Click for copyable input
Out[3]//MatrixForm=
Dimensions 给出张量的维数.
In[4]:=
Click for copyable input
Out[4]=
这是张量的 元素.
In[5]:=
Click for copyable input
Out[5]=
ArrayDepth 给出张量的阶.
In[6]:=
Click for copyable input
Out[6]=

张量的阶等于指定每个元素所需的指标数. 通过使用较少的指标数可以取出子张量.

Transpose[t]张量的前两个指标的转置
Transpose[t,{p1,p2,}]转置张量,使第 k 个指标变成为第 指标
Tr[t,f]构造张量 t 的广义迹
Outer[f,t1,t2]构造张量 乘法算子 f 下的广义外积
t1.t2构造 的点积( 的最后一个指标和 的第一个指标被删去)
Inner[f,t1,t2,g]构造广义内积,带有乘法算子 f加法算子 g

张量运算.

可以把 k 阶张量看作有 k 个插入指标的位置. 使用 Transpose 是重排这些位置的有效方法. 如果把张量的元素看作构成 k 维立方体,那么 Transpose 就是旋转(也可能是反射)该立方体.

在最一般的情形,Transpose 允许任意重排张量指标. 函数 Transpose[T,{p1,p2,,pk}] 给出一个新的张量 ,使得 的值由 给定.

如果最初有一个 ××× 张量,使用 Transpose 后,将得到一个 ××× 张量.

这是一个矩阵,也可以看作 2×3 张量.
In[7]:=
Click for copyable input
Out[7]=
使用 Transpose 给出 3×2 张量. Transpose 实际上将张量指标的两个位置交换.
In[8]:=
Click for copyable input
Out[8]=
原张量中的元素 变成转置张量的元素 .
In[9]:=
Click for copyable input
Out[9]=
这里生成一个 2×3×1×2 张量.
In[10]:=
Click for copyable input
Out[10]=
这里转置  的前两层.
In[11]:=
Click for copyable input
Out[11]=
结果是 3×2×1×2 张量.
In[12]:=
Click for copyable input
Out[12]=

如果一个张量的不同层次具有同样的长度,则可以使用 Transpose 压缩不同的层次.

这里压缩所有的三层,给出主对角元素的列表.
In[13]:=
Click for copyable input
Out[13]=
这里仅压缩前两层.
In[14]:=
Click for copyable input
Out[14]=

也可以用 Tr 提取张量的对角元素.

这里构造三阶张量的普通迹.
In[15]:=
Click for copyable input
Out[15]=
这里是广义迹,将这些元素放入一个列表.
In[16]:=
Click for copyable input
Out[16]=
这里仅组合对角元素到第二层.
In[17]:=
Click for copyable input
Out[17]=

外积以及其推广是一种用低阶张量构造高阶张量的方法. 外积有时称为直接积,张量积或 Kronecker 积.

根据结构的观点,Outer[f,t,u] 给出的张量有一个 u 插入到 t 的每个元素的位置的结构. 所得结构中的元素通过使用函数 f 组合 tu 的元素来获得.

这里给出两个向量的外积 . 结果是一个矩阵.
In[18]:=
Click for copyable input
Out[18]=
对长度为3和长度为2的两个向量外积 ,得到 3×2 矩阵.
In[19]:=
Click for copyable input
Out[19]=
2×2 矩阵和长度为3的向量的外积 是 2×2×3 张量.
In[20]:=
Click for copyable input
Out[20]=
这是该张量的维数.
In[21]:=
Click for copyable input
Out[21]=

××× 张量和 ××× 张量的广义外积是 ××××× 张量. 如果两个张量的阶为 rs,其广义外积的阶为 .

用指标来描述,对两个张量 应用 Outer 的结果是张量 ,其元素是 .

在标准张量计算中,在 Outer 中最常用的函数 fTimes,相应于标准外积.

然而,在组合运算中,把 f 取为 List 常常是方便的. 使用 Outer,可以得到一个张量元素与其它张量的元素的所有可能的组合.

构造 Outer[f,t,u] 时,把 u 插入到 t 的每一点. 构造 Inner[f,t,u] 时,组合并删去 t 的最后一维和 u 的第一维,即取 ××× 张量和 ××× 张量(其中 ),得到一个 ×××××× 张量.

最简单的例子是向量的内积. 对两个长度相同的向量使用 Inner,将得到一个标量. Inner[f,v1,v2,g] 是普通标量积的推广,其中 f 起着乘法的作用,g 起着加法的作用.

这是两个向量的标准标量积的推广.
In[22]:=
Click for copyable input
Out[22]=
这里给出矩阵乘积的推广.
In[23]:=
Click for copyable input
Out[23]=
这是一个 3×2×2 张量.
In[24]:=
Click for copyable input
Out[24]=
这是一个 2×3×1 张量.
In[25]:=
Click for copyable input
Out[25]=
这里给出一个 3×2×3×1 张量.
In[26]:=
Click for copyable input
Out[26]=
这是结果的维数.
In[27]:=
Click for copyable input
Out[27]=

可以把 Inner 看作是对一个张量的最后一个指标和另一张量的第一个指标进行压缩. 如果想压缩其它指标对,可以先把该指标对转置到第一或最后的位置,然后使用 Inner,再把结果转置回去.

在张量的许多应用中,需要添加正负号实现反对称. 函数 Signature[{i1,i2,}] 给出交换的正负号,常常用于这种目的.

Outer[f,t1,t2,]通过组合 最低层元素构造广义外积
Outer[f,t1,t2,,n]将第 n 层子列表作为分离元素处理
Outer[f,t1,t2,,n1,n2,] 中的第 层子列表作为分离元素
Inner[f,t1,t2,g]使用 的最低层元素,构造广义内积
Inner[f,t1,t2,g,n]将第一个张量的指标 n 与第二个张量的第一个指标合并压缩

将张量的某个列表作为分离的元素处理.

这里每一单独符号被作为分离元素处理.
In[28]:=
Click for copyable input
Out[28]=
但这里将第一层子列表作为分离元素处理.
In[29]:=
Click for copyable input
Out[29]=
ArrayFlatten[t,r]从一个 r 阶的 r 阶张量产生一个展平的 r 阶张量
ArrayFlatten[t]展平矩阵的矩阵(等同于 ArrayFlatten[t,2]

展平矩阵块.

这里是一个矩阵块(一个矩阵的矩阵,这可以看成是齐边地放在一个大的矩阵中的一些块).
In[30]:=
Click for copyable input
Out[30]//TableForm=
这里是将这些块拼在一起后形成的矩阵.
In[31]:=
Click for copyable input
Out[31]//TableForm=