【发布时间】:2018-01-05 15:33:10
【问题描述】:
我有一个大数组K (29000 x 29000):
K= numpy.random.random((29000, 29000))
我想对 K 应用以下操作:
output = K* (1.5 - 0.5 * K* K)
为了尝试阻止 'MemoryError' ,我正在按照thread 的答案中的建议进行计算。
但是,当我尝试对大数组进行如下赋值操作时,我仍然得到MemoryError:
K *= 1.5 - 0.5 * K * K
欢迎任何帮助。
注意:这不是重复的帖子。有一个关于这个post 使用cython 的建议。但我正在寻找可能不依赖于 Cython 的替代解决方案。
【问题讨论】:
-
使用
dask.array。在这里查看dask.pydata.org/en/latest/array.html -
@Till Hoffman 不是重复的......这篇文章是单独发布的,目的是向更广泛的受众提出 MemoryError 的问题。感谢您使用 cython 的建议,但这篇新文章的目的是明确我当前的 MemoryError 问题,因为我正在寻找可能不依赖于 Cython 的替代解决方案。
-
表达式
1.5 - 0.5 * K * K仍然需要创建临时数组来保存中间结果。您的阵列需要将近 7 GB。你的电脑有多少内存? -
也许是
temp = K*K; temp *= -0.5; temp += 1.5; K *= temp; del temp。这应该避免在内存中有 3 个数组。