【发布时间】:2015-10-19 11:29:11
【问题描述】:
我正在寻找以下 matlab 函数的适当矢量化,以消除 for 循环并通过多线程提高速度。
size(A) = N-by-N,其中30 <= N <= 60
1e4 <= numIter <= 1e6
function val=permApproxStochSquare(A,numIter)
%// A ... input square non-negative matrix
%// numIter ... number of interations
N=size(A,1);
alpha=zeros(numIter,1);
for curIter=1:numIter
U=randn(N,N);
B=U.*sqrt(A);
alpha(curIter)=det(B)^2;
end
val=mean(alpha);
end
【问题讨论】:
-
对于大 N,使用
parfor可能是一种选择。 -
@Daniel 是的 parfor 是简单而好的解决方案,但我需要没有并行计算工具箱 (parfor) 的解决方案
-
除了parfor,我只想在循环外预计算
sqrt(A)。parfor可以在没有并行计算工具箱的情况下使用,但您没有任何灵活性。 -
对于这么小的矩阵,
parfor可能无济于事。除非有人想对det的多次调用进行矢量化处理,否则我认为没有显着改进的机会。 -
另外,您可以通过
U = randn(N,N,numIter)在循环外预先计算U,然后通过U(:,;,curIter)在循环中访问它,这可能会节省一些时间。另外,你可以试试det(U.*sqrt(A))^2。
标签: matlab matrix vectorization determinants