我在我的一个项目中遇到了一些奇怪的行为。特别是,当运行此代码时:
import numpy as np
coefficientMatrix = np.zeros([12500, 43750])
coefficientMatrix[229, 798] = 1.0942131827
我的Python进程崩溃了:
这里有什么不妥?
系统规格(如果与此相关):Windows 7 x64,8Gb RAM,Python 2.7 32位,numpy 1.9.2。
答案 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的大数组。