我在维度A
的Matlab中有一个矩阵MxN
,结构如下
A=[23 10 3;
23 4 5;
456 6 8;
456 8 9;
456 12 14;
5 56 32]
A
的关键特征是,在第一列中有一些值重复某个(非固定)次数:在示例中23
重复两次,456
重复3次,3
重复一次。
我想要一些建议来编写一段代码,将23
替换为1
,将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
答案 0 :(得分:1)
您可以按照rahnema的建议使用unique
。从docs我们可以获得更多洞察力:
[C,ia,ic] =唯一(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