我使用以下玩具示例来显示我的问题:
A = np.ones((3,2))
B = np.ones((2,3))
res = np.zeros(3,)
for i in range(0,3):
res[i] = A[i,:].dot(B[:,i])
print res
打印结果是
[ 2. 2. 2.]
也就是说,给定矩阵A
和B
,我希望将A
的第一行乘以B
的第一列,然后是第二,第三列,...
换句话说,假设两个矩阵:
A B
[ a11, a12 [ b11, b12
a21, a22 ] b21, b22 ]
我想要的是
[ a11 * b11 + a12 * b21, a21 * b12 + a22 * b22 ]
我知道我的实施很慢。有没有什么方法可以快速实现? 谢谢大家的帮助!!!
答案 0 :(得分:1)
使用B.T
转置B
并将A
和B
元素相乘。
C = A*B.T
C = np.sum(C, axis=1)
答案 1 :(得分:1)
您还可以使用np.einsum
:
np.einsum("ij,ji->i" , A, B)
# array([ 2., 2., 2.])
另一个例子:
A = np.array([[1,3],[4,5]])
B = np.array([[3,2],[1,1]])
A
#array([[1, 3],
# [4, 5]])
B
#array([[3, 2],
# [1, 1]])
np.einsum("ij,ji->i" , A, B)
# array([ 6, 13])