复杂的If循环

时间:2011-04-14 19:33:01

标签: matlab

有没有人知道是否有一种简单的方法来制作这种if-loop:

如果a或b(或更多)等于1,那么只有那些真实变量的新值才会变为例如1。 5?!

2 个答案:

答案 0 :(得分:3)

如果我理解你的问题,试试这个

newValue = 5;
valueToFind = 1;
vector = [2 3 4 6 1 3 2 1 3];

vector(vector==valueToFind) = newValue;

更新(以回复下面的评论):

没有一种正确的方法可以做到这一点,但我可能会制作一个价值观的“表格”来寻找以及如何与新的同行相提并论。例如,

valuesTable = [1 3 4 6 9;... %#old values
               2 0 5 7 0];   %#new values

然后您可以按如下方式浏览它们:

vector = [2 3 4 6 1 3 2 1 3];

valuesTable = [1 3 4 6 9;... %#old values
               2 0 5 7 0];   %#new values

N = size(valuesTable,2);     %#count indices to go through

for n = 1:N
    old = valuesTable(1,n);  %#get current old value
    new = valuesTable(2,n);  %#get corresp. new value

    vector(vector==old) = new; %#replace the values
end

可能有其他方法而不是我的“表格”方法,但我发现它清晰,明显且易于阅读。

答案 1 :(得分:0)

要将Phonon的答案扩展到您要查找多个值的情况,请使用ismember

newValue = 5;
valuesToFind = [1 3];
vector = [2 3 4 6 1 3 2 1 3];

vector(ismember(vector, valuesToFind)) = newValue