在NumPy中:
A = np.array([[1,2,3],[4,5,6]])
array([[1, 3, 5],
[2, 4, 6]])
B = np.array([[1,2],[3,4],[5,6]])
array([[1, 2],
[3, 4],
[5, 6]])
A.dot(B)
array([[35, 44],
[44, 56]])
我只关心获得A.dot(B).diagonal() = array([35, 56])
有没有办法让array([35, 56])
无需计算所有行和列的内积?即ith row
与ith column
的内在产品?
我问,因为对于较大的矩阵,性能差异变得更为显着。
答案 0 :(得分:3)
这只是2D阵列的矩阵乘法:
C[i, j] = sum(A[i, ] * B[, j])
所以既然你只想要对角线元素,看起来像是在追求
sum(A[i, ] * B[, i]) # for each i
所以你可以使用列表理解:
[np.dot(A[i,:], B[:, i]) for i in xrange(A.shape[0])]
# [22, 64]
OR,(这只是因为你想要一个diagonal
,所以这假定如果A的维度为n x m
,则B的维度为m x n
):
np.sum(A * B.T, axis=1)
# array([22, 64])
(这里没有花哨的笨拙技巧,只是玩数学)。
答案 1 :(得分:0)
您可以简单地省去您不关心的参数中的行吗?
2x3 x 3x2为您提供2x2的结果。
1x3 x 3x2矩阵将只给出[A] [B]的顶行,1x2矩阵。
编辑:误读了这个问题。尽管如此,矩阵中的每个值都是由列和行的转置产生的。