python - 除了 RAM 之外,还有哪些因素限制了 Numpy 数组的大小?这些因素可以调整吗?

标签 python memory numpy

假设我创建了一个数组:

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

我遇到内存错误。

如果我将数组大小减半(注意,在我的机器上创建需要 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) 的数组。

有什么方法可以在不拆分的情况下做到这一点吗?

最佳答案

如果您的笔记本电脑有 2GB 内存,而 a 需要 1.6,那么内存不足的可能性就很大。 Windows、您的浏览器、邮件等已经占用了大量的资源。

作为一个额外的复杂性,numpy 将需要一个连续的 1.6 GB 内存块。 这进一步降低了出现如此大区 block 的可能性。

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

关于python - 除了 RAM 之外,还有哪些因素限制了 Numpy 数组的大小?这些因素可以调整吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856047/

相关文章:

python - Django 使用 ANSI_X3.4-1968 编码而不是 UTF-8

.net - 可视化大对象堆碎片

linux - 如何在linux用户空间应用程序中测试地址是否可读

python - 将数组形状转换为字符串

python - 从 numpy timedelta64 获取秒数

python - Tensorflow:在类中创建图形并在外部运行

python - TypeVar 和赋值表达式

python - 如何在 python 中将十进制 0 打印为 000

c - 与 C 中的 NULL 相比的非空参数

numpy - 如何将 pandas 系列的 Numpy 对象转换为 Numpy 矩阵?