首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab中实现双循环矢量化?

如何在Matlab中实现双循环矢量化?
EN

Stack Overflow用户
提问于 2013-06-27 22:30:02
回答 1查看 2K关注 0票数 0
代码语言:javascript
复制
y = 0;

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

我这样向量化了内部循环,

代码语言:javascript
复制
y = 0;

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

这为我的代码带来了大约60%的速度提升。我如何也向量化外部循环?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 23:52:03

您可能正在寻找meshgrid函数。它的设计目的是填充看起来需要的m x n组合。例如:

代码语言:javascript
复制
>> 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

这有点复杂,因为内循环依赖于外循环的值。因此,您需要屏蔽掉不需要的n,m对(见下文)。

修改您提供的原型代码,您将得到如下所示的结果:

代码语言:javascript
复制
[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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17345936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档