Matlab заменить номер - PullRequest
       3

Matlab заменить номер

1 голос
/ 19 июля 2011

в столбце, значение 2 заменить на 1, а значения 1 и 3 заменить на 2. В коде, который я написал ниже, возникла проблема:

S=[1 1 1 2 2 3 3 3 3];
S(S==2)=1; S(S==1)=2; S(S==3)=2;

результат:

S=[2 2 2 2 2 2 2 2 2]

Однако, результат, который я хочу получить, равен S = [2 2 2 1 1 2 2 2 2]. кто-нибудь может помочь?

Ответы [ 3 ]

4 голосов
/ 19 июля 2011

Это происходит потому, что на шаге S(S==1)=2; на вас влияют изменения с шага S(S==2)=1;. Попробуйте это

S = [1 1 1 2 2 3 3 3 3];
S_copy = S;
S(S_copy == 2) = 1; S(S_copy == 1) = 2; S(S_copy == 3) = 2;

или вы можете также сохранить результаты тестов в отдельных переменных:

S = [1 1 1 2 2 3 3 3 3];
f1 = (S == 2);
f2 = (S == 1);
f3 = (S == 3);
S(f1) = 1; S(f2) = 2; S(f3) = 2;
0 голосов
/ 19 июля 2011

Вместо того, чтобы вручную заменять каждое значение, вы можете использовать дополнительную матрицу для определения «карты» от входных значений в S до выходных значений.

>> S = [1 1 1 2 2 3 3 3 3];  % input
>> M = [2 1 2];              % M[i] = j -> map value i to j
>> S = M(S)                  % compute output
S =
     2     2     2     1     1     2     2     2     2

Эта операция должна быть очень быстрой в Matlab.

Обратите внимание, что этот метод работает до тех пор, пока значения в S можно интерпретировать как значения индекса (то есть они являются целыми числами и не слишком велики).

0 голосов
/ 19 июля 2011

вы приближаетесь, но проблема возникает, когда вы меняете все 2 на одно. после этого заявления S(S==2)=1; массив выглядит так S = [1 1 1 1 1 3 3 3 3]; и после двух других заявлений S(S==1)=2; S(S==3)=2; Ваш массив, очевидно, будет иметь все 2.

вместо S(S==2)=1; S(S==1)=2; S(S==3)=2;

вы можете сделать так:

S(S==2)=-1; S(S==1)=2; S(S==3)=2;S(S==-1)=1;

* * 1012 то есть. на первом шаге измените все 2 на другое значение (например, -1 здесь), а затем выполните необходимое преобразование, т.е. S(S==-1)=1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...