gpt4 book ai didi

python - numpy.memmap 无法处理非常大的数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:05 25 4
gpt4 key购买 nike

我需要在内存中保存一个非常大的向量,大小大约为 10**8,并且我需要对其进行快速随机访问。我尝试使用 numpy.memmap,但遇到以下错误:

RuntimeWarning: overflow encountered in int_scalars bytes = long(offset + size*_dbytes)

fid.seek(bytes - 1, 0): [Errno 22] Invalid argument

似乎 memmap 使用了 long 而我的向量长度太大了。

有没有办法克服这个问题并使用 memmap?或者也许有更好的选择?

谢谢

最佳答案

简单的解决方案

听起来您使用的是 32 位版本的 Python(我还假设您在 Windows 上运行)。来自numpy.memmap文档:

Memory-mapped files cannot be larger than 2GB on 32-bit systems.

因此,解决您的问题的简单方法是将您的 Python 安装升级到 64 位。

如果您的 CPU 是在过去十年的某个时候制造的,那么应该可以升级到 64 位 Python。

备选方案

只要您的 Python 是 32 位的,处理大于 2 GB 的数组就永远不会简单或直接。您唯一真正的选择是在您最初创建阵列/将其写入磁盘时将阵列分成不大于 2 GB 的部分。然后,您将独立地对每个部分进行操作。

此外,您仍然必须对每个部分使用 numpy.memmap,否则 Python 本身会耗尽内存。

重型替代品

如果处理这类大型数组是您必须经常做的事情,您应该考虑将您的代码/工作流切换到其中一个大数据框架。现在有一大堆可用于 Python 的工具。我用过 Pyspark之前广泛使用,而且它非常易于使用(尽管需要大量设置)。在评论中 B. M. 提到 Dask ,另一个这样的大数据框架。

虽然这只是一次性任务,但启动这些框架之一可能不值得。

关于python - numpy.memmap 无法处理非常大的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54204639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com