[英]Vectorizing slow code in matlab
我一直試圖矢量化這段代碼一段時間,但一直無法做到。 有人可以幫忙嗎。
%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;
矢量化並不是突然提高性能的“魔法”,它基本上減少了函數調用和迭代的開銷。 在您的情況下,循環有 400 次迭代並且只有一些函數調用,開銷很小。 沒有實際運行您的代碼,因為我沒有所有輸入(至少缺少options.annealfunc
)我猜大部分時間都花在執行矩陣乘法上。 提高矩陣乘法性能的正確方法是在 GPU 上運行它們。 假設你有一個兼容的顯卡和分布式計算工具箱的許可證,你必須將你的陣列轉換為gpuArrays
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.