gpt4 book ai didi

matlab - 如何在matlab中优化嵌套for循环

转载 作者:行者123 更新时间:2023-12-03 16:55:50 28 4
gpt4 key购买 nike

我在 matlab 程序中有一个嵌套了三次的 for 循环。你们谁能帮我优化一下。

w=5;
a = rand(m*n,10); b=rand(m,n);
for i = 1 : m
for j = 1 : n
for k = 1 : l
if (i-w >= 1 && i+w <= m)
featureL = a(((i-1)*n)+j,:); featureR = a(((i-1)*n)+j-d,:);
D1(i,j,k) = sqrt( sum( (featureL - featureR) .* (featureL - featureR) ) );
D2(i,j,k) = mean2( b(i-w:i+w, j-w:j+w) );
end
end
end
end

我知道使用 meshgrid 可以大大提高性能,但我不确定该怎么做。

感谢期待。

可以这样吗..

[X Y Z] = meshgrid(1:m,1:n,1:l);
D1(something containing X,Y,Z) = sqrt( sum( ( a(something cont. X,Y) - a(something cont. X,Y)).*(a(something cont. X,Y) - a(something cont. X,Y)) ) );
% similarly D2

非常感谢!

最佳答案

我发现渐进地解决这些问题的好方法。从检查最内层循环中的所有内容开始,看看是否可以在更高级别完成。这将减少重复计算。

例如,您可以执行 if (i-w >= 1 && i+w <= m)两个级别更高(因为它只取决于 iwm ),减少 if 检查和跳过循环迭代。完成后,您的 featureLfeatureR计算可以向上移动一个级别;它们在 k 内执行循环但只依赖于 j .同样,sqrt( sum( (featureL - featureR) .* (featureL - featureR) ) )可以在 k 之外计算循环,放入一个变量,稍后赋值。

事实上,据我所知,您可以摆脱整个 kk 开始循环从未使用过。这是您应用了其中一些代码的代码:

w=5; 
a = rand(m*n,10);
b=rand(m,n);
for i = 1 : m
if (i-w >= 1 && i+w <= m)
for j = 1 : n
featureL = a(((i-1)*n)+j,:);
featureR = a(((i-1)*n)+j-d,:);
x = sqrt( sum( (featureL - featureR) .* (featureL - featureR) ) );
y = mean2( b(i-w:i+w, j-w:j+w) )
D1(i,j,:) = x;
D2(i,j,:) = y;
end
end
end

关于matlab - 如何在matlab中优化嵌套for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559221/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com