我如何处理大型,内存饥饿的numpy阵列?

时间:2015-07-22 17:07:40

标签: python numpy memory matplotlib

我有一个创建数组的程序:

List1 = zeros((x, y), dtype=complex_)

目前我正在使用x = 500y = 1000000。 我将通过一些公式初始化列表的第一列。然后,后续列将根据前一列计算自己的值。 列表完全填满后,我将使用imshow()显示此多维数组。

列表中每个值(项)的大小为24个字节。 代码中的示例值为:4.63829355451e-32

当我使用y = 10000000运行代码时,它会占用太多RAM并且系统会停止运行。我该如何解决这个问题?有没有办法保存我的RAM,同时仍然能够轻松地使用imshow()处理列表?另外,列表可以imshow()显示多大?

1 个答案:

答案 0 :(得分:4)

没有办法解决这个问题(以任何一般方式)。

计算机(as commonly understood)具有有限的RAM,并且它们需要元素在RAM中才能对它们进行操作。

complex128数组大小10000000x500需要大约74GiB才能存储。 如果您希望使用常规计算机(<{3}}),则需要以某种方式减少正在处理的数据量

一种常见的技术是对数据进行分区并单独处理每个分区(可能在多台计算机上)。根据您尝试解决的问题,可能会使用特殊的数据结构来减少表示数据所需的内存量 - 一个很好的例子是supercomputer

需要这么多内存是非常不寻常的 - 在进入非常复杂的解决方法之前,请务必仔细考虑是否实际需要