【发布时间】:2020-05-28 10:22:56
【问题描述】:
我有一些输出双值数组的 C++ 代码。我想在 python 中使用这些双精度值。传输值的最明显和最简单的方法当然是将它们转储到文件中,然后在 python 中重新读取文件。但是,这会导致精度损失,因为并非所有小数位都可以转移。另一方面,如果我添加更多小数位,文件会变大。我尝试传输的数组有几百万个条目。因此,我的想法是使用 double 的二进制表示,将它们转储到二进制文件中并在 python 中重新读取。
第一个问题是,我不知道双精度值是如何在内存中格式化的,例如here。从内存中读取对象的二进制表示很容易,但我必须知道符号位、指数和 mantiassa 的位置。当然有standards。因此,第一个问题是,我如何知道我的编译器使用哪个标准?我想使用g++-9。我尝试为各种编译器搜索这个问题,但没有任何准确的答案。下一个问题是关于如何将字节转回给定格式。
另一种可能是将 C++ 代码编译为 python 模块并直接使用它,仅从内存中传输没有文件的数组。但我不知道这是否容易快速设置。
我还看到可以使用 numpy 直接从 python 中的字符串编译 C++ 代码,但我找不到任何文档。
【问题讨论】:
-
为什么需要知道内存表示?它很可能是 IEEE 754,无论您在哪里使用它,您都可以直接读写它
-
如果您的 python 和 C++ 实现不同(假设它们都在同一平台上运行),我会感到惊讶。
-
使用
struct库,这就是它的用途
标签: python c++ numpy floating-point