I have a boolean array call it flag
.
I have two numeric arrays ifTrue
, ifFalse
. All these arrays are the same size, For purposes of this question assume every element in these arrays is unique.
I would like a function g
with the property that
a = g(flag, ifTrue, ifFalse)
all(flag == (a == ifTrue))
all(~flag == (a == ifFalse))
Or in English, I would like g
to return ifTrue
elements when flag
is true, and ifFalse
elements when flag
is false.
Or, in matlab, I could do this with loops:
a = zeros(size(ifTrue));
for i = 1 : numel(ifTrue);
if flag(i)
a(i) = ifTrue(i)
else
a(i) = ifFalse(i)
end
end
Is there a vectorized approach?
Thanks
%# 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)
Assuming that flag contains ones for true, and zeros for false elements: a = flag .* ifTrue + (1 - flag) .* ifFalse;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With