2011-04-14 8 views
0

Est-ce que quelqu'un sait s'il y a un moyen simple de faire ce genre de cas en boucle:Compliqué Si les boucles

Si un ou b (ou plusieurs d'entre eux) égal à 1, alors la nouvelle valeur de seulement ces variables sont de vrais changements à par exemple 5 ?!

Répondre

3

Essayez ceci, si je comprends bien votre problème

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

vector(vector==valueToFind) = newValue; 

Mise à jour (pour répondre à votre commentaire ci-dessous):

Il y a est pas une bonne façon de le faire, mais je ne serais probablement faire une «table» des valeurs à rechercher et de ce qu'il faut réassembler avec leurs nouveaux homologues. Par exemple,

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

Vous pouvez ensuite passer par eux comme suit:

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 

Il pourrait y avoir d'autres approches plutôt que mon approche « table », mais je trouve clairement, palpable et facile à lire .

+0

Merci mon ami, mais disons que j'ai 5 index différents et un vecteur (1:10). Maintenant, dans chaque nouvelle génération, je veux remplacer chacun d'entre eux par une nouvelle valeur, basée sur une valeur qu'ils ont actuellement. Je dois tout faire en une seule étape - selon ce que vous avez suggéré, mon vecteur ne cesse de changer à chaque pas. – Davor

+0

Que voulez-vous dire par indices? – Phonon

+0

tout nombre numérique donné (soit 1 à 5 par exemple) – Davor

0

Pour étendre la réponse de Phonon au cas où vous avez plusieurs valeurs à rechercher, utilisez ismember.

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

vector(ismember(vector, valuesToFind)) = newValue