matlab替换号码

时间:2011-07-19 07:41:47

标签: matlab

在一列中,值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 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为在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 :(得分: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中的值可以解释为索引值(即它们是整数而不是太大),此方法就可以正常工作。

答案 2 :(得分:-1)

你越来越近但是一旦你将所有的2改为1就会出现问题。 在此声明之后 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;

即。在第一步中将所有2更改为其他值(例如-1),然后执行所需的转换,即S(S==-1)=1;