【发布时间】:2011-11-18 07:14:02
【问题描述】:
我有一个(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 有效地执行此操作(数组可能非常大)。有人知道我该怎么做吗?
【问题讨论】:
-
“不循环”是什么意思?你必须检查数组中的每一项,所以无论你使用什么技巧来隐藏循环,它都是 O(m*n)。
-
我认为他的意思是在 Numpy 中循环而不是在 Python 中循环。编译后的 Numpy 函数中的 O(mn) 比 Python
for循环中的 O(mn) 快得多。当编译代码和解释代码的选项时,常量物质。 span> -
From your comments,因为您希望将其概括为处理通用编号。列中,您可能会发现this solution这个问题值得一读。
标签: python performance numpy vectorization