在Matlab

时间:2017-07-18 08:57:47

标签: matlab

我在维度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

1 个答案:

答案 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