【问题标题】:Is it possible to create a 1million x 1 million matrix using numpy? [duplicate]是否可以使用 numpy 创建 100 万 x 100 万矩阵? [复制]
【发布时间】:2011-09-14 09:40:36
【问题描述】:

可能重复:
Python Numpy Very Large Matrices

我尝试了 numpy.zeros((100k x 100k)) 并返回“数组太大”。 对 cme​​ts 的回应: 1)我可以创建 10k x 10k 矩阵,但不能创建 100kx100k 和 1milx1mil。 2) 矩阵不是稀疏的。

【问题讨论】:

标签: python numpy


【解决方案1】:

您的系统可能没有足够的内存来将矩阵存储在内存中,但现在您可能有足够的 TB 可用磁盘空间。在这种情况下,numpy.memmap 将允许您将数组存储在磁盘上,但看起来好像它驻留在内存中。

但是,最好重新考虑这个问题。你真的需要这么大的矩阵吗?任何涉及它的计算都可能非常慢,并且需要逐块完成。

【讨论】:

    【解决方案2】:

    您的矩阵是否有很多零条目?我怀疑确实如此,很少有人会做这么大的密集问题。

    您可以使用稀疏矩阵轻松做到这一点。 SciPy 内置了一个很好的集合。http://docs.scipy.org/doc/scipy/reference/sparse.html 稀疏矩阵所需的空间随着非零元素的数量而不是维度而增长。

    【讨论】:

      【解决方案3】:

      我们可以做一些简单的数学来找出答案。 100 万乘 100 万矩阵有 1,000,000,000,000 个元素。如果每个元素占用 4 个字节,则需要 4,000,000,000,000 字节的内存。也就是说,3.64 TB。

      Python 的给定实现也有可能比单个数字使用更多。例如,从浮点数到双精度数的飞跃意味着您将需要 7.28 TB。 (Python 也有可能将数字存储在堆上,而你得到的只是一个指向它的指针,大约使占用空间增加一倍,甚至不考虑元数据——但这是一个很容易出错的理由,当我谈论 Python 时我总是错的内部,所以我们不要挖掘太多。)

      我想numpy 没有硬编码限制,但如果您的系统没有那么多可用内存,那真的没什么可做的。

      【讨论】:

      • Python 确实比单个数字使用的更多(大约 10 字节 IIRC),但 numpy 是用 C 和 Fortran 编写的。
      • 顺便说一句,numpy 的重点是数组在内存中是紧凑的,所以 numpy.float32 数组每个元素只需要 4 个字节(加上整个数组的一点点恒定开销)。不过,您所说的对于 python 列表来说是完全正确的!
      • 人们在思考任何复杂系统的内部时通常是错误的。包括他们自己建造的。
      • 严格来说(根据 ISO)是 3.64 tibibytes 和 4 TB。但我讨厌“tibibyte”这个词,所以+1。 :-)
      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多