2

改进此代码的最佳方法是什么:

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

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

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

还有其他方法可以提高内存使用率或使用我的 cmp 函数对 numpy 的数组进行排序吗?

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

但我希望有一些方法可以使用 Python 实现对巨大数据集的内存高效排序。有任何想法吗?

4

2 回答 2

2

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

b = convert(a)
idx = np.argsort(b)
sort_a = a[idx]
于 2011-08-06T14:41:25.240 回答
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]

它不是就地的,因此与 6800 MB 相比,您有 1400 MB。

于 2011-08-06T08:28:12.390 回答