假设我创建了一个数组:
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/