【问题标题】:What are the factors, aside from RAM, limiting Numpy array size and can they be adjusted?除了 RAM 之外,还有哪些因素限制了 Numpy 数组的大小,它们可以调整吗?
【发布时间】:2014-02-18 13:58:37
【问题描述】:

假设我创建了一个数组:

a=np.ones((21600,13,3,128),dtype=complex)

我遇到内存错误。

如果我将数组大小减半(n.b 这需要 >10 分钟在我的机器上创建):

b=np.ones((10800,13,3,128),dtype=complex)

以 GB 为单位的大小为:

b.nbytes/1024**3 = 0.803375244140625 GB

这远低于我笔记本电脑的 RAM 容量 (2GB) - 因此,我认为创建“a”应该可行。是什么限制了我处理这么大的数组?

理想情况下,我想用dtype=complex 创建一个形状为(86400,13,3,128) 的数组。

有什么方法可以做到这一点而不拆分它?

【问题讨论】:

  • 等等,ab 具有相同的尺寸和相同的dtype
  • 听起来像是在交换 - 你在终端中检查过 top 吗?还是你在用windows?
  • 抱歉,复制和粘贴技能不佳.. 更新了问题。
  • 内存碎片可能会起作用,尤其是。使用 32 位 NumPy。您需要 1.6GB 的 连续 虚拟内存用于数组 a
  • 在装有 Windows 的 4GB 笔记本电脑上运行 numpy,我很少能在单个阵列中获得超过 2GB 的空间,其余的被操作系统占用。 Windows 使用了大量的 PC 资源。我最近花了不到 100 美元,12GB 的草看起来更绿了......

标签: python memory numpy


【解决方案1】:

如果您的笔记本电脑有 2GB 内存,a 会占用其中的 1.6,那么内存不足的可能性非常高。 Windows、您的浏览器、邮件等已经占用了相当多的时间。

作为一个额外的复杂因素,numpy 将需要一个连续的 1.6 GB 内存块。 这进一步降低了拥有如此大块的机会。

如果您的应用程序/用例允许,尝试将数据存储在稀疏矩阵中可能是值得的。这仅存储非零元素 - 这可以节省大量内存(或不): http://docs.scipy.org/doc/scipy/reference/sparse.html

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 2018-09-12
    • 2012-06-30
    • 2018-07-08
    • 1970-01-01
    • 2013-06-04
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多