我目前在PiCloud上运行了一个项目,涉及ODE解算器的多次迭代。每次迭代都会生成一个大约30行和1500列的NumPy数组,每次迭代都会附加到前面结果数组的底部。
通常情况下,我只是让函数返回这些相当大的数组,将它们保存在内存中并在一个处理它们。 除了 PiCloud对数据大小有相当严格的限制,可以通过函数返回输出,以降低传输成本。这很好,除了这意味着我必须启动成千上万的作业,每个作业都在迭代中运行,而且开销很大。
对此最好的解决方案是将输出写入文件,然后使用其他没有传输限制的函数收集文件。
我最好的办法是将其转储到CSV文件中吗?我应该在每次迭代时添加到CSV文件中,还是将其全部保存在数组中直到结束然后只写一次?我有什么特别聪明的东西吗?
答案 0 :(得分:8)
除非有中间文件是人类可读的原因,否则不使用CSV,因为这将不可避免地导致精度损失。
效率最高的可能是tofile
(doc),用于在提前知道数据的所有属性时快速将文件转储到磁盘。
对于与平台无关但特定于numpy的保存,您可以使用save
(doc)。
如果您需要便携性,Numpy和scipy也支持各种科学数据格式,如HDF5。
答案 1 :(得分:2)
我建议查看pickle
模块。 pickle
模块允许您将python对象序列化为字节流(例如,字符串)。这允许您将它们写入文件或通过网络发送,然后稍后重新实例化。
答案 2 :(得分:2)
尝试Joblib - Fast compressed persistence
joblib的一个关键组件是它能够持久保存任意Python对象,并能够非常快速地读取它们。对于使用numpy阵列进行繁重搬运的集装箱来说,它特别有效。实现高速度的诀窍是将numpy数组保存在单独的文件中,并通过memmapping加载它们。