您正在尝试创建150000 x 150000数组。我不确定您使用的是哪种数据类型,但如果是int32(每个数字4个字节),并且忽略了您尝试分配的数组的开销:>>> 150000 * 150000 * 4 # bytes
90000000000
也就是说
^{pr2}$
所以如果你没有84GB的(免费)内存,你会得到一个内存错误。在
使用itertools则更糟,因为您需要一个列表,其中每个元素包含一个指针(在64位计算机上,已经是8字节),并且根据您的python版本和计算机,每个整数需要大约20-30个字节:>>> import sys
>>> sys.getsizeof(1)
28
基本上,这将导致RAM要求:>>> (28 + 8) * 150000 * 150000 # bytes
810000000000
>>> (28 + 8) * 150000 * 150000 / 1024 / 1024 / 1024 # Gigabytes
754.37
如果有足够的硬盘存储空间,可以尝试计算从一个阵列的每个点到另一个阵列中所有点的距离,然后将其保存到磁盘,然后转到第一个阵列中的下一个点,计算到第二个阵列中所有点的所有距离,依此类推。但是,根据存储值的方式(例如,如果以txt格式保存值),可能会占用更大的内存。但这只允许您计算距离-您将无法将所有值保存在RAM中。在
对于MemoryError,最直接的解决方案是购买更多的RAM(您可以根据上面的数字计算出需要多少RAM)。如果这不是一个选择,你需要改变你的方法。在