作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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)
两个级别更高(因为它只取决于 i
, w
和 m
),减少 if 检查和跳过循环迭代。完成后,您的 featureL
和 featureR
计算可以向上移动一个级别;它们在 k
内执行循环但只依赖于 j
.同样,sqrt( sum( (featureL - featureR) .* (featureL - featureR) ) )
可以在 k
之外计算循环,放入一个变量,稍后赋值。
事实上,据我所知,您可以摆脱整个 k
自 k
开始循环从未使用过。这是您应用了其中一些代码的代码:
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/
我是一名优秀的程序员,十分优秀!