我的代码运行速度非常慢。有人可以帮我矢量化吗。
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
答案 0 :(得分:3)
您可以杀死内部循环,以bsxfun
获取u
-
yN = y(1:N);
u = bsxfun(@times,yN,bsxfun(@minus,x(ii,:),cumsum(bsxfun(@times,w(1:N,:),yN))))
对于外部循环,由于迭代与w
上的更新之间的数据依赖性,可能很难对该循环进行矢量化。