如果在matlab中矢量化

时间:2011-12-14 14:55:02

标签: matlab vectorization conditional-operator

我有一个布尔数组调用它flag

我有两个数字数组ifTrueifFalse。所有这些数组都是相同的大小。出于这个问题的目的,假设这些数组中的每个元素都是唯一的。

我想要一个具有

属性的函数g
a = g(flag, ifTrue, ifFalse)

all(flag == (a == ifTrue))
all(~flag == (a == ifFalse))

或者用英语,我希望gifTrue为真时返回flag元素,在ifFalse为false时返回flag元素。

或者,在matlab中,我可以用循环来做到这一点:

a = zeros(size(ifTrue));
for i = 1 : numel(ifTrue);
    if flag(i)
         a(i) = ifTrue(i)
    else
         a(i) = ifFalse(i)
    end
end

是否有矢量化方法?

由于

2 个答案:

答案 0 :(得分:8)

%# Given, for example:
ifTrue = 1:10
ifFalse = -ifTrue  
flag = rand(1,10) > 0.5
%# First, set 'a' to ifFalse
a = ifFalse
%# Then override the places where flag is true
a(flag) = ifTrue(flag)

答案 1 :(得分:1)

假设该标志包含true和false的元素:a = flag .* ifTrue + (1 - flag) .* ifFalse;