python - numpy 的内存错误在哪里

标签 python arrays numpy memory

我在使用 numpy.where 时遇到 MemoryError,但我不确定原因。我无法在这里发布实际的代码,但下面是一个复制该问题的小工作示例。

import numpy as np
dat = np.random.randn(100000, 1, 1, 1, 45, 2, 3)
# The following two steps seem superfluous but I wanted to replicate
# behaviour in the original code    
cond = dat[:,0,0,0,0,0,0] > 0
cond = cond[:,None,None,None,None,None,None]

dat2 = np.where(cond, dat, 0)
dat[...,2] = np.where(cond, dat[...,2], dat2[...,2]) # Causes MemoryError

我知道向计算机添加更多内存可以解决该问题,但我想了解这里发生了什么。

我预计上面的数组切片不会复制数组,而只会返回一个 View ,但我认为它实际上是出于某种原因复制数组。

最佳答案

这里没有发生“魔法”,您使用 np.random.randn(100000, 1, 1, 1, 45, 2, 3) 创建的数据数组非常大.

Numpy 似乎将每个数字存储为 64 位(8 字节) float ,因此您的数组占用大约 206 MB 的内存(100000 * 1 * 1 * 1 * 45 * 2 * 3 * 8)。

/usr/bin/time -v python test.py说该程序在峰值时使用了大约 580 MB,这可能是由于复制对象造成的。

关于python - numpy 的内存错误在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309576/

相关文章:

Python URL 命令导出到 .xlsx 文件

python - 使用 `scipy.interpolate.griddata` 插值非常慢

python - 将方法添加到python中加载的类/模块

c# - 使用对象数组中的数组

Java Array Index out of Bounds 异常 with/for 循环

使用较大整数的 Python 2.7 数组范围无法正常工作

python - 用非通用函数向量化列表理解

python - numpy计算自定义矩阵乘法

python - 如何在原始源代码中添加自定义NumPy函数?

python - 尝试将文件加载到 Python 中,但它声明它不存在,即使它确实存在