数据交换格式 ocaml 到 python numpy 或 pandas

data exchange format ocaml to python numpy or pandas

我在 ocaml 中生成时间序列数据,这些数据基本上是一长串浮点数,从几 kB 到几百 MB。我想使用 python numpy 和 pandas 库阅读、分析和绘制它们。现在,我正在考虑将它们写入 csv 文件。

二进制格式可能会更有效率?我很快就会使用 HDF5,但 Ocaml 没有绑定。是否有一种双方都可以轻松使用的良好二进制交换格式?写文件是最好的选择,还是有更好的数据交换协议?甚至可以在线更新的内容?

首先我想提一下,实际上有针对 OCaml 的 HDF-5 绑定。但是,当我遇到同样的问题时,我没有找到适合我的目的并且足够成熟的。所以我不建议你使用它,但谁知道呢,也许今天有更多的下降。

因此,根据我的经验,在 OCaml 中存储数字数据的最佳方式是 Bigarrays。它们实际上是 C 指针的包装器,可以在 OCaml 运行时之外分配。它们也可以是内存映射区域。所以,对我来说,这是在不同进程(可能用不同语言编写)之间共享数据的最有效方式。您可以使用内存映射与 OCaml、Python、Matlab 或其他任何东西共享数据,而不会产生任何痛苦,尤其是当您不想同时从不同进程修改数据时。

其他方法,是使用 MPI、ZMQ 或裸套接字。我更喜欢后者,因为前者不支持双数组的唯一原因。此外,我建议您寻找 capn'proto,它也非常高效,并且具有 OCaml 和 Python 的绑定,并且对于您的特定用例,可以很好地工作。