如何修复np.arange上的内存错误(0.01 * 1e10,100 * 1e10,0.5)?

问题描述 投票:0回答:2

当我运行像np.arange()这样的大数字的1e10时,我有内存错误。我怎样才能修复np.arange(0.01*1e10,100*1e10,0.5)上的内存错误

python numpy memo
2个回答
1
投票

arange返回一个numpy数组。

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

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

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

更改为在python3中使用range,或在python2中使用xrange,意味着将使用generator动态创建此数组。

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

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

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

但是,如果你真的需要如此大量的内存,那么我认为亚马逊正在出租可能支持它的服务器:EC2 In-Memory Processing Update: Instances with 4 to 16 TB of Memory + Scale-Out SAP HANA to 34 TB


0
投票

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

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

希望能帮助到你,

© www.soinside.com 2019 - 2024. All rights reserved.