2011-12-14 3 views
6

부울 값 배열 flag이 있습니다.matlab에 벡터화 된 경우

두 개의 숫자 배열 ifTrue, ifFalse이 있습니다. 이 모든 배열은 같은 크기입니다.이 질문에서이 배열의 모든 요소는 고유하다고 가정합니다. flag이 거짓 인 경우

은 내가 flag에 해당하는 경우

a = g(flag, ifTrue, ifFalse) 

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

또는 영어

, 나는 ifTrue 요소를 반환 g을하고자하는 속성 기능 gifFalse 요소를 싶습니다.

또는 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

일을 :) – kol

1

거짓 요소에 대한 사실에 대한 것, 1과 0이 포함이 솔루션은 내 것보다 훨씬 더 효율적입니다 a = flag .* ifTrue + (1 - flag) .* ifFalse;

+0

이 있다는 지적 가치가있을 수도 있습니다 이 솔루션은 Inf와 Nan을 제대로 처리하지 못합니다. 허용 된 대답은이 사건을 올바르게 처리합니다. – John