我有一个(N,3)
numpy值数组:
>>> vals = numpy.array([[1,2,3],[4,5,6],[7,8,7],[0,4,5],[2,2,1],[0,0,0],[5,4,3]])
>>> vals
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 7],
[0, 4, 5],
[2, 2, 1],
[0, 0, 0],
[5, 4, 3]])
我想从数组中删除具有重复值的行。例如,上述数组的结果应为:
>>> duplicates_removed
array([[1, 2, 3],
[4, 5, 6],
[0, 4, 5],
[5, 4, 3]])
我不知道如何在没有循环的情况下用numpy高效地完成这个任务(数组可能非常大)。有人知道我怎么做吗?
这里有一种方法可以处理一般数量的列,并且仍然是矢量化的方法-
步骤:
沿每行排序。
查找每行中连续元素之间的差异。因此,任何至少有一个零微分的行都表示一个重复的元素。我们将使用此来获取有效行的掩码。因此,最后一步是使用掩码从输入数组中选择有效行。
样本运行-
这是一个选项:
请注意,这还是在幕后循环。你不能回避。但即使是上百万行,它也应该能正常工作。
相关问题 更多 >
编程相关推荐