我试图对一堆图像(>40k)进行平均缩放。当我将大小(3,256,256)的图像读入np数组时,内存使用率为%40 ( 60 GB中,使用htop检查)。但是,当我运行arr.std()时,程序会崩溃并给出一个MemoryError,即使使用率仍然是%40。
对可能出了什么问题有什么想法吗?
发布于 2016-06-06 19:24:56
您是否完全确定数组的每个单元格只占用1字节,因为在默认情况下,它为单元格分配8字节。
我创建了3x3小数组,它占用72个字节。
import numpy as np a = np.array(np.mat('1, 2, 3; 4, 5, 6; 7, 8, 9')) print(a.nbytes) # Use this .nbytes instead of sys.getsizeof
256x256x3x8字节= 1572864 B=1.5MB
1.5MB x 40,000 = 60000 MB \约58.6 GB
你说过你至少有四万,所以如果你有更多,而且std正在使用一些内存来扁平数组(请参阅http://docs.scipy.org/doc/numpy-1.9.2/reference/generated/numpy.std.html,您将在这里登陆methods.py),那么内存就会耗尽。
解决方案非常简单:从这里强制执行字节类型int8或其他类型: http://docs.scipy.org/doc/numpy-1.9.2/user/basics.types.html
a = np.array(np.mat('1, 2, 3, ; 4, 5, 6; 7, 8, 9'), dtype=np.int8) print(a.nbytes) # Only 9 Bytes
要检查可用内存,请尝试pythonic方式(而不是htop):
import psutil m = psutil.virtual_memory() print(m.available)
请记住,array.nbytes只显示数组元素消耗的内存量,而不显示用于数组维护的辅助字节。
https://stackoverflow.com/questions/37664829
复制相似问题