第 i 行与第 i 列的点积

eja*_*ang 3 numpy

在 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]])
Run Code Online (Sandbox Code Playgroud)

我只关心得到A.dot(B).diagonal() = array([35, 56])

有没有一种方法可以让我array([35, 56])无需计算所有行和列的内积?ith row即与的内积ith column

我问这个问题是因为对于较大的矩阵,性能差异变得更加显着。

mat*_*fee 6

这只是二维数组的矩阵乘法:

C[i, j] = sum(A[i, ] * B[, j])
Run Code Online (Sandbox Code Playgroud)

所以既然你只想要对角线元素,看起来你在追求

sum(A[i, ] * B[, i]) # for each i
Run Code Online (Sandbox Code Playgroud)

所以你可以只使用列表理解:

[np.dot(A[i,:], B[:, i]) for i in xrange(A.shape[0])]
# [22, 64]
Run Code Online (Sandbox Code Playgroud)

或者,(这只有效,因为你想要 adiagonal所以这假设如果 A 的尺寸为n x m,B 的尺寸将为m x n):

np.sum(A * B.T, axis=1)
# array([22, 64])
Run Code Online (Sandbox Code Playgroud)

(这里没有花哨的 numpy 技巧,只是玩数学)。