为什么在看似足够的RAM的计算机上出现np.sqrt的内存错误?

时间:2018-09-26 23:03:17

标签: python numpy memory

我正在运行一个简单的Python程序,该程序需要花费数小时才能创建一个大型(102,000 x 102,000)float32数组(A)。阵列占用的总内存约为40GiB,我正在具有130GiB RAM的Amazon EC2虚拟机(运行Ubuntu)上运行该内存。没有其他用户进程在运行,我可以使用“ top”来查看,实际上,该程序在数组创建阶段仅使用约56GiB(不要问我为什么还要使用那么多),始终如一即使允许系统处理后,大约免费提供68GiB。到目前为止,一切都很好。

但是程序中的最后一行是

A = np.sqrt(A)

,此时,程序因内存错误而崩溃。我不明白为什么会发生这种情况,即使允许使用相同大小的临时阵列也是如此(这仍将保留大约28 GiB的空间)。我唯一能想到的是np.sqrt()可能在内部使用float64作为暂存空间。还有其他可能的解释吗?

我目前唯一的解决方法是在for循环中逐元素计算平方根。

0 个答案:

没有答案
相关问题