2

我在 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})了,但它只返回具有唯一值的第二列,我想要整行。我怎样才能做到这一点?

谢谢

4

1 回答 1

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

于 2012-09-25T01:52:33.540 回答