【发布时间】:2015-05-07 15:13:52
【问题描述】:
我正在尝试对一个大型 numpy 数组进行排序。它是一个 4 维“float16”数组,形状为(450、470、10、470)(994,050,000 个元素)。加载时数组大小约为 2 GB,我使用的是 64 位 linux(和 64 位 python),所以我应该能够毫无问题地使用所有 8GB 的 RAM,但是一旦我尝试使用 argsort,我得到一个内存错误。
代码如下:
import numpy as np
score = np.load('score.npy')
aaarg = np.argsort(score, axis=None)[:-21:-1]
我的目标是获取数组中最大 20 个元素的索引。我也尝试使用 argpartition 而不是 argsort 但我遇到了同样的问题。有什么办法吗?
我正在使用 python 2.7.9 (Anaconda 2.2.0) 和 numpy 1.9.2 谢谢。
【问题讨论】:
-
你可以用
np.savetxt把它分成几部分,对部分进行排序,然后得到最高的n个值 -
你试过
score.sort()吗?由于它进行就地排序,因此它的内存效率可能要高得多。我猜argsort()需要的内存至少是score的三倍(原始、要排序的副本和返回的索引)。 -
一次对数组的一部分进行排序,然后对结果进行排序,谢谢你的想法。因为我需要索引,所以不能只使用 sort()。
标签: python python-2.7 numpy anaconda