在Matlab中对矩阵中的连续相等值重新编号

在Matlab中对矩阵中的连续相等值重新编号,matlab,Matlab,我在Matlab中有一个矩阵a,其维数MxN,结构如下 A=[23 10 3; 23 4 5; 456 6 8; 456 8 9; 456 12 14; 5 56 32] A的关键特征是,在第一列中,有一些值重复一定次数(不固定):在示例中,23重复两次,456重复三次,3重复一次 我想得到一些建议,用1替换23,456替换2,5替换3,这样我就可以将a转换为 A=[1 10 3; 1 4 5; 2 6 8; 2 8 9;

我在Matlab中有一个矩阵
a
,其维数
MxN
,结构如下

A=[23  10 3;
   23  4  5;
   456 6  8;
   456 8  9;
   456 12 14;
   5   56 32]
A
的关键特征是,在第一列中,有一些值重复一定次数(不固定):在示例中,
23
重复两次,
456
重复三次,
3
重复一次

我想得到一些建议,用
1
替换
23
456
替换
2
5
替换
3
,这样我就可以将
a
转换为

A=[1 10 3;
   1 4  5;
   2 6  8;
   2 8  9;
   2 12 14;
   3 56 32]
这段代码实现了我想要的功能,但它包含了我想要避免的双循环

   C=unique(A(:,1),'stable');
   for j=1:size(C,1)
       for h=1:size(A,1)
           if A(h,1)==C(j)
               A(h,1)=j;
           end
       end
   end

您可以按照rahnema的建议使用
unique
。从中,我们可以获得更多的见解:

[C,ia,ic]=unique(A)还返回索引向量ia和ic。
-如果A是矩阵或数组,则
C=A(ia)
A(:)=C(ic)

这意味着第三个输出
ic
,返回唯一向量
C
的哪一行对应于
A
的给定行。特别是,您需要使用
'stable'
参数来保持相同的顺序,否则索引也将根据唯一值进行排序


因此,在总结中,
unique
的第三个输出分配给
A
的第一列

[~, ~, A(:,1)] = unique(A(:,1), 'stable');
输出:

>> A =

 1    10     3
 1     4     5
 2     6     8
 2     8     9
 2    12    14
 3    56    32

使用
unique
函数的第三个输出:
[~,~,u]=unique(A(:,1),'stable');A(:,1)=u