这个 einsum 操作在做什么? E = np.einsum('ij,kl->il', A,B)

问题描述 投票:0回答:2

给定

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 中的不同数字来感受一下,但我想知道是否有人可以为我分解它,以便我能够理解这个示例中发生的情况。

python numpy math matrix tensor
2个回答
0
投票
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]])

0
投票

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]])
© www.soinside.com 2019 - 2024. All rights reserved.