gpt4 book ai didi

Python MemoryError 何时不是真的内存不足?

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:16 25 4
gpt4 key购买 nike

我正在尝试对一堆图像(>40k)执行平均缩放。当我将大小为 (3,256,256) 的图像读入 np 数组时,内存使用率为 %40(60 GB 中,使用 htop 检查)。但是,当我运行 arr.std() 时,程序崩溃并给出 MemoryError,即使使用率仍为 %40。

对可能出现的问题有什么想法吗?

最佳答案

您完全确定数组的每个单元仅占用 1 个字节吗?因为默认情况下它可能会为单元分配 8 个字节。

我创建了一个小数组 3 x 3,它占用 72 字节。

将 numpy 导入为 np
a = np.array(np.mat('1, 2, 3; 4, 5, 6; 7, 8, 9'))
print(a.nbytes) # 使用这个.nbytes代替sys.getsizeof

256 x 256 x 3 x 8 字节 = 1572864 B = 1.5 MB

1.5 MB x 40,000 = 60000 MB\约 58.6 GB

你说你至少有 4 万个,所以如果你有更多,并且 std 正在使用一些内存来展平数组(参见http://docs.scipy.org/doc/numpy-1.9.2/reference/generated/numpy.std.html,您将登陆这里https://github.com/numpy/numpy/blob/master/numpy/core/_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) # 只有 9 个字节

<小时/>

要检查可用内存,请尝试 pythonic 方式(而不是 htop):

导入 psutil
m = psutil.virtual_memory()
打印(m.可用)

<小时/>

附注请记住,array.nbytes 显示仅由数组元素消耗的内存量,没有一些用于数组维护的辅助字节。

关于Python MemoryError 何时不是真的内存不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37664829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com