所以,假设我有 100,000 个 float 组,每个数组包含 100 个元素。我需要最大的 X 个值,但前提是它们大于 Y。任何不匹配的元素都应该设置为 0。在 Python 中最快的方法是什么?必须维持秩序。大多数元素已经设置为 0。
样本变量:
array = [.06, .25, 0, .15, .5, 0, 0, 0.04, 0, 0]
highCountX = 3
lowValY = .1
预期结果:
array = [0, .25, 0, .15, .5, 0, 0, 0, 0, 0]
最佳答案
这是 NumPy 的典型工作。 ,这对于这些类型的操作来说非常快:
array_np = numpy.asarray(array)
low_values_flags = array_np < lowValY # Where values are low
array_np[low_values_flags] = 0 # All low values set to 0
现在,如果您只需要 highCountX 最大的元素,您甚至可以“忘记”小元素(而不是将它们设置为 0 并对其进行排序),而只对大元素列表进行排序:
array_np = numpy.asarray(array)
print numpy.sort(array_np[array_np >= lowValY])[-highCountX:]
当然,如果您只需要几个元素,则对整个数组进行排序可能不是最佳选择。根据您的需要,您可能需要考虑标准 heapq模块。
关于python - 将数组中的低值归零的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623849/