我正在尝试借助np.fromfile()
将大文件读入数组,但是,在一定数量的字节之后,它会产生MemoryError。
with open(filename,'r') as file:
data = np.fromfile(file, dtype=np.uint16, count=2048*2048*63)
data = data.reshape(63, 2048, 2048)
它在2048 * 2048 * 63上可以正常工作,但在2048 * 2048 * 64上不能工作。如何调试呢?我想知道这里的瓶颈是什么?
编辑:我正在Windows 10上运行,RAM 256GB,它是一个独立的脚本,64位Python。
Edit2:我按照注释的建议进行操作,现在在128 * 2048 * 2048处出现错误,在127 * 2048 * 2048下可以正常工作。
答案 0 :(得分:1)
尽管您相信,但您已经在64位操作系统上安装了32位版本的Python,这意味着虚拟地址空间在用户模式下被限制为只有2 GB,并尝试分配1 GB的连续块或更多由于地址空间碎片而容易失败。
赠品是您的sys.maxsize
,它只是Python构建中C ssize_t
所代表的最大值。 2147483647
对应于2**31 - 1
,这是32位Python上的期望值。 64位版本将报告9223372036854775807
(2**63 - 1
)。
卸载32位版本的Python和download/install a 64 bit version (link is to 3.7.2 download page)(查找安装程序标记为x86-64,不是 x86;文件名应包含amd64
) 。烦人的是,the main page for downloading Python默认为Windows提供32位版本,因此您必须向下滚动到特定版本下载页面的链接,单击最新版本,然后按OS和bittedness向下滚动到完整列表,然后选择适当地。