векторизуется, если в matlab

У меня есть логический массив, назовите его flag .

У меня есть два числовых массива ifTrue , ifFalse . Все эти массивы имеют одинаковый размер. Для целей этого вопроса предположим, что каждый элемент в этих массивах уникален.

Мне нужна функция 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

Есть ли векторизованный подход?

Спасибо

6
задан John 14 December 2011 в 14:55
поделиться