【问题标题】:Vectorization of 3 particular nested for loops3 个特定嵌套 for 循环的向量化
【发布时间】:2015-12-03 00:14:00
【问题描述】:

我有 3 个 for 循环,我想对其进行矢量化。

我做了很多尝试,但我做不到。

这是简单的版本。

我无法解释整个情况,但是:

A 是 100*82。

B 是 203*2000。

C 是 1*10。

D 为 100*5*2000。

for nset=1:100
      for nindy=1:5
          for nimp=1:2000
  if A(nset,2+(nindy-1).*3)==1
      if B(33.*6+nindy,nimp)<= C(1+(nindy-1).*2)+...
          ((C(2+(nindy-1).*2)-C(1+(nindy-1).*2))./11).*A(nset,1+(nindy-1).*3)

         D(nset,nindy,nimp)=1;
      end
  end

         end
      end
  end

我想用矢量化替换 3 个 for 循环...

谢谢....

【问题讨论】:

  • 我认为不可能。
  • 你有内部依赖吗?也就是说,您是否能够在不了解其他元素的情况下处理每个元素?

标签: matlab loops for-loop nested vectorization


【解决方案1】:

是的,这是可能的!这些行应该这样做:

nset=1:100;
nindy=1:5;
nimp=1:2000;
D(bsxfun(@and, (A(nset,2+(nindy-1).*3)==1),bsxfun(@le,shiftdim(B(33.*6+nindy,nimp),-1),bsxfun(@plus,C(1+(nindy-1).*2),bsxfun(@times,((C(2+(nindy-1).*2)-C(1+(nindy-1).*2))./11),A(nset,1+(nindy-1).*3))))))=1;

通过我的电脑,它把运行时间从大约 1 秒更改为 20 分之一秒。

【讨论】:

  • 我试过了,时间减少了 50%,但结果似乎不一样.....有什么建议吗?
  • 我忘了定义间隔。希望它现在应该可以工作了!
猜你喜欢
  • 1970-01-01
  • 2013-03-03
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多