如何在Matlab中矢量化双环?

如何在Matlab中矢量化双环?,matlab,vectorization,nested-loops,Matlab,Vectorization,Nested Loops,我以这种方式对内部循环进行矢量化 y = 0; for m = 0:variable for n = 0:m y = y + f(n,m); end end 这使得我的代码速度提高了60%左右。如何对外部循环进行矢量化?您可能正在寻找meshgrid函数。它被设计来填充你所需要的m×n的组合。例如: y = 0; for m = 0:variable n = 0:m y = y + f(n,m); end 这有点复杂,因为内部循环取决于外部循环的值。因此,您需要屏

我以这种方式对内部循环进行矢量化

y = 0;

for m = 0:variable
  for n = 0:m
    y = y + f(n,m);
  end
end

这使得我的代码速度提高了60%左右。如何对外部循环进行矢量化?

您可能正在寻找
meshgrid
函数。它被设计来填充你所需要的m×n的组合。例如:

y = 0;

for m = 0:variable
  n = 0:m
  y = y + f(n,m);
end
这有点复杂,因为内部循环取决于外部循环的值。因此,您需要屏蔽不需要的[n,m]对(见下文)

修改您提供的原型代码,最终会得到如下结果:

>> m = 1:4;
>> n = 1:3;
>> [mGridValues, nGridValues] = meshgrid(m,n)
mGridValues =
     1     2     3     4
     1     2     3     4
     1     2     3     4
nGridValues =
     1     1     1     1
     2     2     2     2
     3     3     3     3

你的循环相当于简单的
y=f(变量,变量)
。。。你确定你不是想分配给
y(m+1)
…?你总是用f的输出覆盖y,所以只有最后的迭代才会做任何事情。f是数组还是函数?如果是一个函数,那么如何“矢量化”完全取决于f在做什么。你能提供关于函数的更多细节吗?两个参数都可以是向量吗?制约因素是什么?如果将向量参数传递给
f
,它的输出是什么?如果可以将循环替换为向量操作,则始终取决于您的问题。正如一个人所说:你真正的问题是什么?谢谢你指出错误。我已经编辑了这个问题。是的,这就是我要找的!太棒了+1并被接受。根据您的循环,这些代码减少了多少时间。。。?
[mValues, nValues] = meshgrid(0:variable, 0:variable);  %Start with a full combination of values

mask = mValues >= nValues;  %Identify all values where m >= n
mValues = mValues(mask);    %    And then remove pairs which do not
nValues = nValues(mask);    %    meet this criteria

y = f(nValues, mValues );   %Perform whatever work you are performing here