我知道有大量的numpy内存错误主题,所以我希望我没有重复任何内容。我正在尝试使用np.zeros((500000,10000))
创建一个np数组。这在我的Mac上使用16G内存工作正常,但在具有28G内存的Linux服务器上,它会立即失败Memory Error
。我已经验证我运行的是64位版本的Ubuntu和Python,而我是在Numpy 1.9.3上。我在系统之间注意到的唯一区别(除了显而易见的)是在运行ulimit -a
时我得到:
Linux:max locked memory (kbytes, -l) 64
Mac:max locked memory (kbytes, -l) unlimited
这可能是我无法运行此命令的原因吗?如果没有,是否还有一些其他配置选项?
答案 0 :(得分:3)
我最好的猜测是:
我的第一个猜测基于这样一个事实:在64位中,你的阵列将占用500位* 10000 * 8 = 32位的20GB RAM 20GB,因此阵列不适合你的内存。可能存在交换以解释丢失的内存。
我的第二个猜测基于this link,其中解释了np.zeros在第一次访问该内存之前不会在内存中实际分配零。我已经在我的linux(Ubuntu)计算机上测试过,np.zeros可以使用增加的数组,直到达到我的RAM限制。然后,即使它实际上没有分配内存,我也会收到内存错误。
创建矩阵后(增加足够的大小以清除内存使用情况):
a = np.zeros((50,10))
您可以通过在矩阵的每个单元格中存储零来检查所需的实际内存:
a[:,:] = 0.0
或强制操作以便访问并分配内存:
a = a + a
在执行此检查时跟踪计算机的内存使用情况,以了解何时分配内存。