从Matlab中的单元格数组中获取唯一的行

时间:2012-09-25 01:42:59

标签: arrays matlab unique cell

我在Matlab中有一个Nx4单元格数组,如下所示:

id1 word11 word12 word13
....
id2 word21 word22 word32
....   
idN wordN1 wordN2 wordN3

其中四列中的每一列都包含一个字符串,第二列(word11... wordN1)可以包含重复值。我想得到另一个单元格数组,但根据第二列有唯一的行。因此,在上一个示例中,如果word21与wordN1相同,则生成的数组应仅包含以下两行(与重复的哪一行无关;)

id1 word11 word12 word13    
....    
idN wordN1 wordN2 wordN3

我尝试unique(cellArray{2})但它只返回带有唯一值的第二列,我想要整行。我怎么能这样做?

由于

1 个答案:

答案 0 :(得分:3)

我相信以下内容应该这样做:

Z = {'a', 'b'; 'a', 'c'; 'a', 'c'; 'a', 'd'; 'a', 'b'};
[~, I1] = unique(Z(:, 2));
I1 = sort(I1);
Soln = Z(I1, :);

解释?我使用unique的可选附加参数来获取第二列中唯一元素的索引。然后我sort这个索引,以便我们可以保留Z的原始排序。最后,我检索Z索引的I1行。

注意,sort实际上保留原始排序而不是对其进行排序有点不直观:-)原因是I1包含唯一元素的行索引。因此,排序它按照从最小到最大的顺序返回行索引,从而保留Z中的原始顺序。