矢量化广义Hebb算法

时间:2015-10-18 13:48:08

标签: performance matlab matrix vector vectorization

我的代码运行速度非常慢。有人可以帮我矢量化吗。

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

1 个答案:

答案 0 :(得分:3)

您可以杀死内部循环,以bsxfun获取u -

yN = y(1:N);
u = bsxfun(@times,yN,bsxfun(@minus,x(ii,:),cumsum(bsxfun(@times,w(1:N,:),yN))))

对于外部循环,由于迭代与w上的更新之间的数据依赖性,可能很难对该循环进行矢量化。