在Matlab中对矩阵中的连续相等值重新编号
我在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;
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代码>