为什么numpy会在阵列插入时立即崩溃?

时间:2015-09-04 10:44:58

标签: python numpy memory-management

我在我的一个项目中遇到了一些奇怪的行为。特别是,当运行此代码时:

import numpy as np 

coefficientMatrix = np.zeros([12500, 43750])
coefficientMatrix[229, 798] = 1.0942131827

我的Python进程崩溃了:

error message

这里有什么不妥?

系统规格(如果与此相关):Windows 7 x64,8Gb RAM,Python 2.7 32位,numpy 1.9.2。

1 个答案:

答案 0 :(得分:2)

当你分配给coefficientMatrix中的元素而不是使用MemoryError创建数组时,你得到np.zeros的原因是大多数操作系统(包括Windows 7)使用{{ 3}}

使用np.zeros实例化数组时,Windows仅分配虚拟内存地址空间而不是物理RAM。但是,当您实际尝试写入该内存块时,操作系统将需要找到足够的物理内存来保存该阵列。如果不这样做,您将获得MemoryError

由于你的Python进程是32位,lazy memory allocation。一个12500x43750的float64值数组将占用4.375GB的内存,所以你不能拥有一个使用32位Python的大数组。