需要在乘法向量中使用if语句:向量化

时间:2012-10-04 22:54:46

标签: matlab

我有一个载体

V=[ 1 2 3 5 9];

并希望像这样繁殖:

newVect=zeros(1,length(V));

for i=1:length(V)

    if V(i)==1
       newVect(i)=V(i)*somevaluex
    elseif V(i)==5
       newVect(i)=V(i)*somevaluey
    else
       newVect(i)=V(i);
end

这实际上很麻烦,因为我实际上处理的是10000个元素的数组。可以用某种方式用矢量化代替吗?

1 个答案:

答案 0 :(得分:4)

你可以这样做:

newVect = V .* (   someValuex.*(V==1) +  someValuey.*(V==5) + V.*( (V~=1) & (V~=5) ) )

或者更快一点:

newVect=V;
newVect(V==1)=V(V==1)*someValuex;
newVect(V==5)=V(V==5)*someValuey;