高效地将大NumPy数组写入文件的方法
我现在在PiCloud上有一个项目,涉及到多次迭代的常微分方程求解器。每次迭代都会生成一个大约有30行和1500列的NumPy数组,每次的结果都会添加到之前结果的底部。
通常情况下,我会让这些比较大的数组直接由函数返回,保存在内存中,然后一次性处理它们。但是,PiCloud对函数返回的数据大小有比较严格的限制,以控制传输成本。这没问题,但这就意味着我得启动成千上万的任务,每个任务只处理一次迭代,这样开销很大。
看起来最好的解决办法是把输出写入一个文件,然后用他们提供的另一个函数来收集这个文件,这个函数没有传输限制。
我最好的选择是把数据直接存到CSV文件里吗?我应该在每次迭代时都往CSV文件里添加数据,还是等到最后再把所有数据一次性写入?我是不是漏掉了什么特别聪明的办法?
3 个回答
2
我建议你看看 pickle
模块。这个 pickle
模块可以把 Python 对象变成一串字节流(比如字符串)。这样你就可以把这些对象写入文件,或者通过网络发送出去,之后再把它们重新变回来。
2
Joblib 的一个关键功能是它可以保存任意的 Python 对象,并且能非常快速地读取回来。对于那些主要使用 numpy 数组的容器来说,它特别高效。实现这种快速的诀窍是将 numpy 数组保存在单独的文件中,然后通过内存映射的方式加载它们。