3个特定嵌套for循环的矢量化

时间:2015-09-07 12:22:08

标签: matlab loops for-loop nested vectorization

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

我尝试了很多,但我不能这样做。

这是简单的版本。

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

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循环...

...谢谢

1 个答案:

答案 0 :(得分:0)

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

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秒。