使用 Python numpy einsum 获取 2 个矩阵之间的点积
Using Python numpy einsum to obtain dot product between 2 Matrices
刚刚发现这个:
Vectorized way of calculating row-wise dot product two matrices with Scipy
这个 numpy.einsum 真的很棒,但使用起来有点混乱。假设我有:
import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[0,1,2], [1,1,7]])
我如何使用 einsum 中的 "ij" 得到 a 和 b 之间的 "cross dot product"?
基本上使用这个例子我想计算
的点积
[1,2,3] 和 [0,1,2]
[1,2,3] 和 [1,2,7]
[3,4,5] 和 [0,1,2]
[3,4,5] 和 [1,1,7]
并以 [[8,26],[14,42]]
结尾
我知道如果我使用
np.einsum("ij,ij->i",a,b)
我会以 [8, 42] 结尾,这意味着我缺少 "cross" 元素
您的结果仍然是二维的,因此您需要两个索引。您需要的是与第二个数组转置的矩阵乘法,因此您可以通过 ij,kj->ik
:
转置第二个矩阵,而不是正常的 ij,jk->ik
np.einsum('ij,kj->ik', a, b)
#array([[ 8, 24],
# [14, 42]])
相当于:
np.dot(a, b.T)
#array([[ 8, 24],
# [14, 42]])
import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[0,1,2], [1,1,7]])
刚刚发现这个:
Vectorized way of calculating row-wise dot product two matrices with Scipy
这个 numpy.einsum 真的很棒,但使用起来有点混乱。假设我有:
import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[0,1,2], [1,1,7]])
我如何使用 einsum 中的 "ij" 得到 a 和 b 之间的 "cross dot product"?
基本上使用这个例子我想计算
的点积[1,2,3] 和 [0,1,2]
[1,2,3] 和 [1,2,7]
[3,4,5] 和 [0,1,2]
[3,4,5] 和 [1,1,7]
并以 [[8,26],[14,42]]
结尾我知道如果我使用
np.einsum("ij,ij->i",a,b)
我会以 [8, 42] 结尾,这意味着我缺少 "cross" 元素
您的结果仍然是二维的,因此您需要两个索引。您需要的是与第二个数组转置的矩阵乘法,因此您可以通过 ij,kj->ik
:
ij,jk->ik
np.einsum('ij,kj->ik', a, b)
#array([[ 8, 24],
# [14, 42]])
相当于:
np.dot(a, b.T)
#array([[ 8, 24],
# [14, 42]])
import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[0,1,2], [1,1,7]])