首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python MemoryError什么时候不是真的内存不足?

Python MemoryError什么时候不是真的内存不足?
EN

Stack Overflow用户
提问于 2016-06-06 18:51:26
回答 1查看 2.2K关注 0票数 1

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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只显示数组元素消耗的内存量,而不显示用于数组维护的辅助字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37664829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档