我尝试了numpy.zeros((100k x 100k))并返回“数组太大”。 回复评论: 1)我可以创建10k x 10k矩阵,但不能创建100kx100k和1milx1mil。 2)矩阵不稀疏。
答案 0 :(得分:13)
我们可以做简单的数学来找出答案。一百万到一百万的矩阵有1,000,000,000,000个元素。如果每个元素占用4个字节,则需要4,000,000,000,000字节的内存。也就是说,3.64太字节。
Python的给定实现也可能使用多于单个数字的实现。例如,从浮点到双精度的跳跃意味着你需要7.28太字节。 (也有可能Python将数字存储在堆上,你得到的只是一个指向它的指针,大约加倍占用空间,甚至没有考虑到元数据 - 但这是一个很滑的理由,当我谈论Python时我总是错的内部,所以我们不要过多地挖掘它。)
我认为numpy
没有硬编码限制,但是如果你的系统没有那么多可用内存,那么实际上没什么可做的。
答案 1 :(得分:4)
你的矩阵有很多零条目吗?我怀疑它确实如此,很少有人做到那么大的密集问题。
您可以使用稀疏矩阵轻松完成此操作。 SciPy内置了一个很好的设置。http://docs.scipy.org/doc/scipy/reference/sparse.html 稀疏矩阵所需的空间随着非零元素的数量而增长,而不是尺寸。
答案 2 :(得分:2)
您的系统可能没有足够的内存将矩阵存储在内存中,但现在您可能有足够的TB级可用磁盘空间。在这种情况下,numpy.memmap将允许您将数组存储在磁盘上,但看起来好像它位于内存中。
然而,最好重新考虑这个问题。你真的需要这么大的矩阵吗?任何涉及它的计算都可能是不可行的慢,需要按块进行。