0

当我运行大量数据时出现内存错误,例如. 如何修复内存错误np.arange()1e10np.arange(0.01*1e10,100*1e10,0.5)

4

2 回答 2

1

arange返回一个 numpy 数组。

如果我们从0.01e10100e10的步骤0.5,您的数组中大约有200e10项目。由于这些数字是每个项目的双精度(64 位或 8 字节),因此您需要 16 TB 的 RAM。

最好的想法是改变你的算法。例如,如果您在 for 循环中使用它。例如:

for t in np.arange(0.01*1e10,100*1e10,0.5):
  do_simulationstep(t)

更改为range在 python3 或xrangepython2 中使用,意味着该数组将使用生成器动态创建。

for t in range(0.01*1e10,100*1e10,0.5):
  do_simulationstep(t)

但是,如评论中所述,这将不起作用。Range 仅适用于整数,因此我们必须缩放范围以使用整数,然后再次重新缩放结果:

for t in (x*0.5 for x in range(int(1e8/0.5),int(1e12/0.5))):
  do_simulationstep(t)

但是,如果您真的需要如此大量的内存,那么我认为亚马逊正在出租可能支持它的服务器: EC2 内存中处理更新:具有 4 到 16 TB 内存的实例 + 横向扩展 SAP HANA 到 34 TB

于 2019-04-11T09:14:46.673 回答
0

您正在尝试创建一个包含大约 2e12 个元素的数组。如果每个元素都是一个字节,则需要大约 2Tb 的空闲内存来分配它。不确定你有这么多可用的内存,这就是你有内存错误的原因。

注意:您尝试分配的数组包含浮点数,因此它更大。你真的需要这么多元素吗?

希望能帮助到你,

于 2019-04-11T09:13:51.963 回答