Python:带有list.sort的内存高效列表(cmp = myfnc)

时间:2011-08-06 08:18:04

标签: python sorting numpy large-data

改善此代码的最佳方法是:

def my_func(x, y):
    ... do smth ...
    return cmp(x',y') 

my_list = range(0, N)
my_list.sort(cmp=my_func)

与numpy数组(6800MB vs 700MB)相比,python的列表需要大量内存, 但是nympy.array没有cmp参数的sort函数。

是否还有其他方法可以改善内存使用情况或使用cmp函数对numpy数组进行排序?

更新:我当前的解决方案是一个C函数(与SWIG共享),它对大量整数进行排序,并在排序后将其返回给python。

但我希望有一些方法可以用Python实现对大型数据集的内存有效排序。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果你可以编写一个转换你的数组的ufunc,你可以通过argsort进行快速排序:

b = convert(a)
idx = np.argsort(b)
sort_a = a[idx]

答案 1 :(得分:0)

作为替代方案,您可以将内置sorted与numpy数组一起使用:

>>> a = np.arange(10, 1, -1)
>>> sorted(a, cmp=lambda a,b: cmp(a,b))
[2, 3, 4, 5, 6, 7, 8, 9, 10]

它不是就地的,所以你有1400 MB而不是6800 MB。