删除具有相同值的2D数组中的行

时间:2015-02-25 14:15:01

标签: python arrays numpy

我正在寻找一种快速方法,以先到先得的方式删除2D数组中存在的重复值。我知道如果它们相同则删除行的方法,但如果只存在其中一个值则不知道。

a = array([[0, 1],
           [3, 4],
           [3, 5],
           [2, 5],
           [1, 2]])

由于[1]和[2]中存在3,我想删除任何未来出现的值。类似于[3]和[4]中的2,所以输出将是:

a = array([[0, 1],
           [3, 4],
           [2, 5]])

可以看出,与值5重叠。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:2)

纯Python的方式是使用set with list-comprehension:

>>> seen = set()
>>> np.array([x for x in a if seen.isdisjoint(x) and not seen.update(x)])
array([[0, 1],
       [3, 4],
       [2, 5]])

单行仅仅滥用set.update返回None的事实,因此当seen.isdisjoint(x)True时,我们可以使用{{{}更新seen集1}}。

我们也可以将上面的代码写成:

not seen.update(x)