我有一個非常大的乘法和求和操作,我需要儘可能高效地實現。到目前爲止,我已經找到了最好的方法是在MATLAB,在那裏我制訂了問題,因爲bsxfun
:MATLAB的bsxfun是最好的嗎? Python的numpy.einsum?
L = 10000;
x = rand(4,1,L+1);
A_k = rand(4,4,L);
tic
for k = 2:L
i = 2:k;
x(:,1,k+1) = x(:,1,k+1)+sum(sum(bsxfun(@times,A_k(:,:,2:k),x(:,1,k+1-i)),2),3);
end
toc
注意L
將在實踐中更大。有更快的方法嗎?奇怪的是,我需要首先將單身人士維度添加到x
,然後sum
,但我不能讓它工作,否則。
它仍然比我試過任何其他方法快得多,但還不足以對我們的應用程序。我聽說過有關Python函數numpy.einsum
可能更高效的傳聞,但在考慮移植我的代碼之前,我想先問一下。
我使用MATLAB R2017b。
for循環的許多次比bsxfun快。但你似乎已經嘗試過......? – Adiel
矩陣乘法比'bsxfun'快,但這似乎並不能很容易地借給自己是 –
@LuisMendo我認爲改造問題到稀疏矩陣乘法,但它是一個有點嚇人......你以爲這將是更快? – Alex