2011-04-14 55 views
0

有谁知道是否有一个简单的方法,使这种如果循环的:复杂如果循环

如果(其中以上)a或b等于1,则只有那些变量的新值是真正的改变,例如5?

回答

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 

可能有其他的方法,而不是我的“表”的做法,但我觉得它清晰,可扪及易于阅读。

+0

Merci我的朋友,但我们假设我有5个不同的指数和一个矢量(1:10)。现在,在每个新一代中,我想根据他们当前拥有的价值,用新值替换每个新值。我必须一步到位 - 根据你的建议,我的载体会随着每一步而不断变化。 – Davor 2011-04-14 21:58:17

+0

你的指数是什么意思? – Phonon 2011-04-14 21:59:52

+0

任何给定的数字(例如,让它为1到5) – Davor 2011-04-14 22:39:50

0

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

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

vector(ismember(vector, valuesToFind)) = newValue