我有一个k*n
矩阵 X,以及k*k
矩阵 A. 对于每列X
,我想计算标量
X[:, i].T.dot(A).dot(X[:, i])
(或者,从数学角度来说,Xi' * A * Xi
).
目前,我有一个for
loop:
out = np.empty((n,))
for i in xrange(n):
out[i] = X[:, i].T.dot(A).dot(X[:, i])
但是由于n
很大,如果可能的话我想做得更快(即使用一些 NumPy 函数而不是循环)。
这似乎做得很好:(X.T.dot(A)*X.T).sum(axis=1)
编辑:这有点快。np.einsum('...i,...i->...', X.T.dot(A), X.T)
。如果两者都工作得更好X
and A
Fortran 是连续的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)