Tôi có một k*n
ma trận X, và một k*k
ma trận A. Đối với mỗi cột của X
, tôi muốn để tính toán vô hướngTính "v^TA v" cho một ma trận của vectơ v
X[:, i].T.dot(A).dot(X[:, i])
(hoặc, toán học, Xi' * A * Xi
).
Hiện nay, tôi có một vòng lặp for
:
out = np.empty((n,))
for i in xrange(n):
out[i] = X[:, i].T.dot(A).dot(X[:, i])
nhưng vì n
là lớn, tôi muốn thực hiện điều này nhanh hơn nếu có thể (ví dụ: sử dụng một số chức năng NumPy thay vì một vòng lặp).
Xuất hiện * handily * đánh bại mã ban đầu của tôi: cho 'n = 10000, k = 10', mã của tôi là 76.2ms, mã mới là * 1.64ms *. Tốt đẹp! – nneonneo
Cái này nhanh hơn nhiều so với 'np.einsum' đối với' n' cao khi ATLAS tăng lên hơn 1 lõi ... Tôi đã thêm một số thời gian vào câu trả lời bên dưới ... –