在一個列中,值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]。有人可以幫忙嗎?
在一個列中,值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]。有人可以幫忙嗎?
發生這種情況的原因是,在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;
你的距離越來越近,但問題出現了,一旦你改變所有的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
;
您可以使用額外的矩陣來定義從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中的值可以被解釋爲索引值(即它們是整數而不是太大),此方法就可以工作。