1
我有這個代碼運行速度非常慢。有人可以幫我矢量化它。向量化廣義Hebb算法
for ii=1:K,
y=w*x(ii,:)'; % y is N by 1
u=zeros(N,M);
disp(num2str(ii));
for jj=1:N,
u(jj,:)=y(jj)*(x(ii,:)-y(1:jj)'*w(1:jj,:));
end
wold=w;
w=wold+eta*u; % updated weight matrix
end
內循環花費的時間最多。該代碼用於廣義hebb算法。
輸入尺寸:
M=153600;
K=5000;
N=400;
eta=0.004;
size(w)=5000x153600
size(x)=400x153600
感謝您的回答!這大大減少了時間。雖然它似乎有點慢(一次迭代274.285267秒)。你認爲改變:'wold = w; w = wold + eta * u;'到'w = w + eta * u'會有所幫助。 –
@AhishekBhatia是的!這應該有很大的幫助。你說它在274秒慢,那麼矢量化之前的運行時間是多少? – Divakar
我之前沒有測量過它,但如果不是更多,它會提高3倍左右。你有什麼改進建議嗎?我把它改成了'w = w + eta * bsxfun(@ times,w * x(ii,:)',x - cumsum(bsxfun(@ times,w,w * x(ii ,: )'),1));'。可讀性對我來說並不重要。 –