在matlab中矢量化慢代码

时间:2015-10-21 20:07:25

标签: matlab vector vectorization

我一直试图将此代码矢量化一段时间,但一直无法做到。有人可以帮忙吗。

    %X -[153600x400]
    %W -[153600x500]
    %beta=error=scalar
    %errvals=[40x1]
    %n=400
    iter = 1;
    for ii = 1:n 
        disp(ii);
        x = X(:,ii);
        y = W'*x;        
        W = beta*x*y' + W - beta*W*tril(y*y');       
        beta = options.rate*options.annealfunc(iter);       
        err = err + sum((x - W*(W'*x)).^2);
        errvals(iter) = err/iter;       
        if (any(~isfinite(W)))
            warning(sprintf('Lost convergence at iterator %i; lower learning rate?', niter));
            success = 11;
            break;
        end;       
        if (options.printerr == 1)
            fprintf('Error = %d; Iteration = %i\n', err/iter, iter);
        end;        
        iter = iter+1;
    end;

1 个答案:

答案 0 :(得分:1)

矢量化并没有“神奇”突然改善性能,它基本上削减了函数调用和迭代的开销。在您的情况下,一个包含400次迭代并且只有一些函数调用的循环,开销很小。 没有实际运行代码,因为我没有所有输入(至少options.annealfunc缺失)我猜大多数时间都花费在执行矩阵乘法上。提高矩阵乘法性能的正确方法是在GPU上运行它们。假设您拥有兼容的图形卡和分布式计算工具箱的许可证,则必须将阵列转换为gpuArrays < / p>