Сложные циклы If - PullRequest
       2

Сложные циклы If

0 голосов
/ 14 апреля 2011

Кто-нибудь знает, есть ли простой способ сделать такой цикл if такого рода:

Если a или b (или их больше) равны 1, тогда новое значение ТОЛЬКО тех переменных, которыеистинные изменения, например, 5?!

Ответы [ 2 ]

3 голосов
/ 14 апреля 2011

Попробуйте, если я правильно понял вашу проблему

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 голосов
/ 15 апреля 2011

Чтобы расширить ответ Phonon на случай, когда вам нужно найти несколько значений, используйте ismember.

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

vector(ismember(vector, valuesToFind)) = newValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...