【发布时间】:2015-03-09 18:18:02
【问题描述】:
我有一个包含至少 10 万个点(最多 30 亿个)的数组,其中一些是重复的。我想对这些点进行去重并生成一个索引数组,该数组保留了重复点的原始序列。
例如:
x = [(0, 0), # (x1, y1)
(1, 0), # (x2, y2)
(1, 1), # (x3, y3)
(0, 0)] # (x4, y4)
去重x,我们有y:
y = list(set(x)) = [(1, 0), # (x2, y2)
(0, 0), # (x1, y1) and (x4, y4)
(1, 1)] # (x3, y3)
然后我们会得到一个结果索引数组,z:
z = [1, # (x1, y1)
0, # (x2, y2)
2, # (x3, y3)
1] # (x4, y4)
有没有类似 numpy 的方式来获取 z?这是一个蛮力实现:
z = []
for each_point in x:
index = y.index(each_point)
z.append(index)
【问题讨论】:
-
不想学究气,但我在这里看不到任何
numpy。更重要的是:我认为您不能创建包含元组作为元素的numpy数组。最后:numpy.where是您可以在 numpyarray上使用的函数,但如果您需要定位(许多)元素,它会很昂贵。 -
我认为在问题中使用 numpy 会混淆实际问题,这实际上是在寻找与蛮力实现的平等。我在发布之前查看了哪里,但我没有看到与我想做的匹配的示例。
-
我认为 this 几乎正是您要找的东西
-
其实我前段时间也遇到过同样的(类型)问题,也没有找到好的解决方案。 python list + set + dict 'brute force' 方法比使用 numpy 快得多;索引到 numpy 数组非常慢。
-
@ali_m:谢谢 - 这实际上可以解决 my 问题! ;-)
标签: python arrays numpy deduplication