$$tr(A imes B imes C)=tr(B imes C imes A)=tr(C imes A imes B)$$
一系列矩阵相乘,循环它的各个元素,最终得到的结果迹是相同的。
既然说到迹,那么最终结果必定是方阵,只有方阵才有迹。所以乘法中第一个矩阵的行数必定等于最后一个矩阵的列数,因此可以将第一个矩阵移动到最后一个位置而保证运算过程中满足矩阵乘法。
这个规律更明确表达为:如果多个矩阵的乘积是一个方阵,把这个列表弄成环形,从任何一个位置出发开始乘法运算,最终结果都是一个方阵。
import numpy as np
x = np.random.randint(0, 10, (3, 3))
y = np.random.randint(0, 10, (3, 3))
z = np.random.randint(0, 10, (3, 3))
print(np.trace(x @ y @ z))
print(np.trace(x @ z @ y))
print(np.trace(z @ x @ y))
print(np.trace(y @ z @ x))