寻求快速过滤器()与删除

时间:2013-09-04 03:50:05

标签: python performance optimization numpy

我正在尝试编写速度相当快的快速排序,但这在许多其他应用程序中都有用。

内置过滤器(function,iterable)函数返回iterable中的项列表,当传递给函数时返回true,并且比只需要检查一个条件的传统for循环要快得多列表。

我正在寻找的是一个非常快速的功能(如过滤器),它不仅会构建一个新列表,而是从旧列表中删除所需的项目。在单枢轴快速排序的应用中,这将允许删除过滤器语句,并且可能接近分区例程的2倍速。

python中是否内置了这样的功能? numpy怎么样?如果不是,最快的方法是什么?

作为参考,这是当前的分区代码:

def partition(u):
    lesser = singleQuicksort(filter(lambda num: num <= u[0], u[1:]))
    greater = singleQuicksort(filter(lambda num: num > u[0], u[1:]))
    return lesser, greater

2 个答案:

答案 0 :(得分:1)

使用布尔掩码:

def partition(u):
    mask = u[1:] <= u[0]
    return u[1:][mask], u[1:][~mask]

答案 1 :(得分:0)

numpy中,排序。这是数组索引。当您想要“过滤”inf时,请考虑以下情况:

a=array([1,2,3,4,inf])
a[isfinite(a)]

或小于3的值

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

为什么'排序'?因为索引仍然会创建一个新数组:

>>> a=array([1,2,3,4,inf])
>>> a[isfinite(a)]
array([ 1.,  2.,  3.,  4.])
>>> id(a)
40165288 #your result will differ
>>> id(a[1])
40253288
>>> id(a[isfinite(a)][1])
39747512
>>> a[1]
2.0
>>> a[isfinite(a)][1]
2.0