当我运行像np.arange()
这样的大数字的1e10
时,我有内存错误。我怎样才能修复np.arange(0.01*1e10,100*1e10,0.5)
上的内存错误
arange
返回一个numpy数组。
如果我们从0.01e10
到100e10
以0.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
您正在尝试创建一个2e12元素的数组。如果每个元素都是一个字节,则需要大约2Tb的可用内存来分配它。不确定你有多少ram可用,这就是你有内存错误的原因。
注意:您尝试分配的数组包含浮点数,因此它甚至更大。你真的需要这么多元素吗?
希望能帮助到你,