我在 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})
但它只返回具有唯一值的第二列,而我想要整行。我怎样才能做到这一点?
谢谢
最佳答案
我相信以下应该做到这一点:
Z = {'a', 'b'; 'a', 'c'; 'a', 'c'; 'a', 'd'; 'a', 'b'};
[~, I1] = unique(Z(:, 2));
I1 = sort(I1);
Soln = Z(I1, :);
解释一下?我使用 unique
的可选附加参数来获取第二列中唯一元素的索引。然后,我对该索引进行排序,以便保留 Z
的原始顺序。最后,我检索由 I1
索引的 Z
行。
注意,sort
实际上保留了原始顺序而不是对其进行排序,这有点不直观:-) 原因是 I1
包含了独特的元素。因此,对其进行排序会按从小到大的顺序返回行索引,从而保留 Z
中的原始顺序。
关于arrays - 从 Matlab 元胞数组中获取唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575182/