2011-12-14 67 views
6

我有一個布爾型數組叫它flag矢量如果在matlab

我有兩個數字陣列ifTrueifFalse。所有這些數組都是相同的大小,爲了這個問題的目的,假設這些數組中的每個元素都是唯一的。

我想一個函數g與屬性,

a = g(flag, ifTrue, ifFalse) 

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

或英文,我想g返回ifTrue元素時flag是真實的,ifFalse元素時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 

是否有一個量化的方法嗎?

感謝

回答

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) 
+0

+1該解決方案更有效的比我:) – kol 2011-12-14 17:01:38

1

假設標誌包含了真實的人,和零虛假內容:a = flag .* ifTrue + (1 - flag) .* ifFalse;

+0

這可能是值得一提,那此解決方案無法正確處理Inf和nan。被接受的答案確實處理了這種情況。 – John 2017-09-08 18:15:07