改善此代码的最佳方法是:
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实现对大型数据集的内存有效排序。有什么想法吗?
答案 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。