0

我需要以下代表性代码部分中的“for”循环尽可能高效地运行。代码中的 mean 函数充当了我自己函数的代表占位符。

x = linspace(-1,1,15);
y = linspace(2,4,15);
[xgrid, ygrid] = meshgrid(x,y);
mc = rand(100000,1);
z=zeros(size(xgrid));

for i=1:length(xgrid)
    for j=1:length(ygrid)
        z(i,j) = mean(xgrid(i,j) + ygrid(i,j) + xgrid(i,j)*ygrid(i,j)*mc);
    end
end

我已经对代码进行了矢量化,并通过构建一个矩阵来将其速度提高了大约 2.5 倍,其中 mc 为每个网格点复制。我的实现导致一个非常大的矩阵(3 x 22500000)充满了重复的数据。我通过将矩阵转换为单精度来减轻这种方法的内存损失,但似乎应该有一种更有效的方法来做我想做的事情,以避免复制这么多数据。

4

1 回答 1

1

你可以用bsxfun几个reshapes-

A = bsxfun(@times,y,x.'); %//'
B = bsxfun(@plus,y,x.');  %//'
C = mean(bsxfun(@plus,bsxfun(@times,mc,reshape(A,1,[])) , reshape(B,1,[])),1);
z_out = reshape(C,numel(x),[]).';
于 2015-08-26T06:10:56.267 回答