【问题标题】:nested for loop matlab or parfor loop嵌套 for 循环 matlab 或 parfor 循环
【发布时间】:2014-06-10 09:27:59
【问题描述】:

我有一个 nested for 循环,但它会减慢一点 处理,我怎样才能使嵌套循环有效。我需要的是对于外循环的每个值,内循环继续它的所有迭代。 但是,我认为它不会像两个嵌套循环那样影响 计算。 我的第二个问题是,parfor 循环是否会影响速度或可能支持我的现象?

我的代码:

n=2;
for i=1:500
for jj=1:n
    A{1}=['Obj' num2str(1)];
    A{2}=['Obj' num2str(2)];
end  
end

【问题讨论】:

标签: matlab loops for-loop nested parfor


【解决方案1】:

您的嵌套循环不会表现出对循环参数的任何依赖性,因此您可能需要重新格式化上面的代码。但总的来说,只要您的迭代不相互依赖并且迭代次数足够大以支持初始化并行处理的延迟,那么 parfor 循环是允许的并且它(分别)执行得更好。如果您正在使用某种单元格或矩阵,并且您的嵌套循环覆盖了其中的连接部分,则始终可以使用线性索引方法。例如

n=100;
s=0;
a=randi([1 n],n);
for i=1:n
   for j=1:n
       s=s+a(i,j);
   end
end

可以改写为

n=100;
s=0;
a=randi([1 n],n);
for i=1:n^2
    s=s+a(i);
end

但是,如果您的数组很大并且您的迭代不相互依赖,通常最好利用“parfor”构造。

【讨论】:

  • 我的内循环依赖于外循环,对于外循环的每一次迭代,内循环都应该完全完成它的迭代。我也有单元数组实现,所以parfor 循环不允许单元数组。
  • 通过一个迭代对另一个迭代的依赖,我的意思是 a(i,j)=a(j,i) 而不是 s=s+a(i,j);将您所指的数组从一次迭代更改为下一次迭代的东西。如果是这种情况,那么是的,parfor 不会为您工作。我建议您查看 Matlab 关于“parfor”的文档,以获得比我试图传达的更好的解释。
  • 是的,我明白这一点,但问题是我使用元胞数组是哪个主要问题,但在这种情况下如何使用parfor
  • 您不能使用 parfor 但您仍然可以使用 linear index 方法。此外,如果您的元胞数组是数字的(或者如果您可以将其设为数字​​并稍后转换回来),您可以将 cell2mat 与 parfor 一起使用。
  • 好的,parfor 可以与矩阵一起使用。请告诉我M = ['Obj' num2str(i:1:n)]; 怎么会重复使用1n
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
相关资源
最近更新 更多