2015-09-07 77 views
0

我有3循環,我想矢量化它。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與量化的循環......

感謝....

+0

我不認爲是可能的。 – 2015-09-07 13:03:22

+0

你有沒有內部的依賴關係?所以說,你能在不知道其他人的情況下處理每個元素嗎? – patrik

回答

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秒到1/20秒。

+0

我試過了,時間減少了50%,但結果似乎並不平等.....有什麼建議嗎? – user5235967

+0

我忘了定義間隔。希望它現在能夠工作! –

+0

謝謝,現在它工作正常! – user5235967