给定
A = np.array([[1,2],[3,4],[5,6],[7,8]])
B = np.array([[9,10,11],[12,13,14]])
如果我这样做的话,就会是矩阵乘法
C = np.einsum('ij,jk->ik', A, B)
但是如果我不在输入中乘以 j 而是使用
k
...
E = np.einsum('ij,kl->il', A, B)
我有效地总结了什么?有没有办法直观地思考这个问题?我很困惑,因为维度最终与矩阵乘法相同。
我尝试使用矩阵 A 和 B 中的不同数字来感受一下,但我想知道是否有人可以为我分解它,以便我能够理解这个示例中发生的情况。
In [211]: A = np.array([[1,2],[3,4],[5,6],[7,8]])
...: B = np.array([[9,10,11],[12,13,14]])
In [212]: E = np.einsum('ij,kl->il', A, B); E
Out[212]:
array([[ 63, 69, 75],
[147, 161, 175],
[231, 253, 275],
[315, 345, 375]])
RHS 上没有“j”的“ij”表示“j”上的和:
In [214]: A.sum(axis=1, keepdims=True)
Out[214]:
array([[ 3],
[ 7],
[11],
[15]])
同样对
B
进行求和,得到相同的结果:
In [215]: A.sum(axis=1, keepdims=True)*B.sum(axis=0, keepdims=True)
Out[215]:
array([[ 63, 69, 75],
[147, 161, 175],
[231, 253, 275],
[315, 345, 375]])
将
A
与 axis=1
、B
与 axis=0
相加,并计算外积:
np.einsum('ij,kl->il', A, B)
np.outer(A.sum(1), B.sum(0))
array([[ 63, 69, 75],
[147, 161, 175],
[231, 253, 275],
[315, 345, 375]])