【问题标题】:Why does numpy crash instantly upon an array insertion?为什么 numpy 在插入数组时会立即崩溃?
【发布时间】:2015-09-04 10:44:58
【问题描述】:

我在我的一个项目中遇到了一些奇怪的行为。具体来说,当这段代码运行时:

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。

【问题讨论】:

  • it crashes 你能发布完整的跟踪吗?
  • @arodriguezdonaire “它崩溃了”是指 Windows 的“python.exe 已停止工作”提示出现。
  • 我的系统没有问题。 Python 2.7(conda-accelerate)5 GB 内存,LINux 3.16.0-46 内核。
  • 那么您应该在 32 位 Python 上获得 MemoryError
  • 数组大小似乎超过了最大值。看看这个线程:stackoverflow.com/questions/855191/…

标签: python numpy memory-management


【解决方案1】:

为什么在分配给 coefficientMatrix 中的元素时会得到 MemoryError,而不是在使用 np.zeros 创建数组时,是因为大多数操作系统(包括 Windows 7)使用 lazy memory allocation

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

由于您的 Python 进程是 32 位的,it can address a maximum of 4GB of memory (and possibly even less)。一个 12500x43750 的 float64 值数组将占用 4.375GB 内存,因此使用 32 位 Python 根本无法拥有这么大的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多