我有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循环...
...谢谢
答案 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秒。