bFi*_*ig8 2 python numpy matrix dot-product
刚遇到这个:
这个 numpy.einsum 真的很棒,但使用起来有点混乱。假设我有:
import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[0,1,2], [1,1,7]])
Run Code Online (Sandbox Code Playgroud)
我将如何使用 einsum 中的“ij”来获得 a 和 b 之间的“交叉点积”?
使用这个例子基本上我想计算的点积
[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)
Run Code Online (Sandbox Code Playgroud)
我最终会得到 [8, 42] 这意味着我缺少“交叉”元素
您的结果仍然是二维的,因此您需要两个索引。您需要的是矩阵乘法与转置的第二个数组,因此不是 normal ij,jk->ik
,而是通过ij,kj->ik
以下方式转置第二个矩阵:
np.einsum('ij,kj->ik', a, b)
#array([[ 8, 24],
# [14, 42]])
Run Code Online (Sandbox Code Playgroud)
这相当于:
np.dot(a, b.T)
#array([[ 8, 24],
# [14, 42]])
Run Code Online (Sandbox Code Playgroud)
import numpy as np
a = np.array([[1,2,3], [3,4,5]])
b = np.array([[0,1,2], [1,1,7]])
Run Code Online (Sandbox Code Playgroud)