如何克服 numpy.unique 的 MemoryError

Tom*_*Geo 5 python arrays numpy

我正在使用 Numpy 版本 1.11.1,并且必须处理一个二维数组

my_arr.shape = (25000, 25000)
Run Code Online (Sandbox Code Playgroud)

所有值都是整数,我需要一个唯一的数组值列表。使用时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
Run Code Online (Sandbox Code Playgroud)

我的机器只有 8 GB RAM,但我在另一台具有 16 GB RAM 的机器上尝试过,结果是一样的。监控内存和 CPU 使用率并不能表明问题与 RAM 或 CPU 相关。

原则上,我知道数组包含的值,但是如果输入更改怎么办...另外,如果我想用另一个替换数组的值(假设全部为 2 乘 0),是否需要大量 RAM还有?

fzz*_*zle 0

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

  • 我在 64 位并使用“numpy.memmap”时仍然遇到“MemoryError”。该数组是“float”,形状为“(8465, 103114)”,仅比OP的数组稍大一些。(它来自地理栅格。) (2认同)