如何克服numpy.unique的MemoryError

时间:2016-10-05 15:23:12

标签: python arrays numpy

我正在使用Numpy版本1.11.1并且必须处理

的二维数组
my_arr.shape = (25000, 25000)

所有值都是整数,我需要一个唯一的数组值列表。当我使用lst = np.unique(my_arr)时:

Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    palette = np.unique(arr)
  File "c:\Python27\lib\site-packages\numpy\lib\arraysetops.py", line 176, in unique
    ar = np.asanyarray(ar).flatten()
MemoryError

我的机器只有8 GB RAM,但是我尝试使用另一台16 GB RAM的机器,结果是一样的。监视内存和CPU使用情况并不表明问题与RAM或CPU有关。

原则上,我知道数组所包含的值,但是如果输入改变了怎么办...另外,如果我想用另一个替换数组的值(让我们说全部2乘0),它还需要大量的RAM吗?

1 个答案:

答案 0 :(得分:0)

Python 32位无法访问4个以上的GiB RAM(通常为~2.5 GiB)。显而易见的答案是使用64位版本。如果这不起作用,另一种解决方案是使用numpy.memmap并将数组内存映射到存储在磁盘上的文件中。