2011-07-19 29 views
1

在一個列中,值2 1和值替換1 & 3 2.替換I中寫有問題的代碼:MATLAB替換數目

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

發生這種情況的原因是,在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; 
-1

你的距離越來越近,但問題出現了,一旦你改變所有的2的一個。 此語句後 S(S==2)=1; 該數組看起來像這樣 S = [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;

即第一步改變所有2的其他值(如-1在這裏),然後做所需的轉換即S(S==-1)=1;

0

您可以使用額外的矩陣來定義從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中的值可以被解釋爲索引值(即它們是整數而不是太大),此方法就可以工作。