在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的内积
我之所以这样问,是因为矩阵越大,性能差异就越明显。
发布于 2012-11-20 09:04:12
这只是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]或者(这只是因为你想要一个维度,所以假设如果A的维度是n x m,那么B的维度就是m x n):
np.sum(A * B.T, axis=1)
# array([22, 64])(这里没有花哨的麻木把戏,只是玩弄数学)。
发布于 2012-11-20 09:02:34
您可以简单地省略参数中您不关心的行吗?
2x3 x 3x2的结果为2x2。
1x3 x 3x2矩阵将只给出A的顶行,这是一个1x2矩阵。
编辑:误读问题。尽管如此,矩阵中的每个值都是由列和行的转置乘积产生的。
https://stackoverflow.com/questions/13465047
复制相似问题