Вы можете создать функцию с именем ifelse
, не только на этот раз, но я думаю, что ее можно использовать во многих случаях.
function result = ifelse(condition, trueResult, falseResult)
%IFELSE input condition, ifture returns trueResult, vice versa
narginchk(3,3); % check correct number of input args, min = 3, max = 3
if condition
result = trueResult;
else
result = falseResult;
end
Основываясь на ответе из @beaker выше, я сравниваю 3методы, и это показывает, что перезапись является самой быстрой, функция arrayfun на втором месте, наконец, цикл for:
T = (1:90)';
A = [3;4;7;18;22;39;46;55;81];
% first method:using ifelse
P1 = arrayfun(@(x, y, z) ifelse(x, y, z), (ismember(1:size(T), A))', T * 1.1, T * 0.9);
% second: using for loop
P2=[];
for k = 1:size(T,1)
if ismember(k,A)
q=T(k).*1.1;
else
q=T(k).*0.9;
end
P2=[P2;q];
end
% third and fastest one: assining and overwriting
P3 = T * 0.9;
P3(A) = T(A) * 1.1;
Вы можете выбрать для вашего удобства.