如何将 numpy 二维数组作为一种可以用 C++ 读取的二进制格式存储到磁盘上

Posted

技术标签:

【中文标题】如何将 numpy 二维数组作为一种可以用 C++ 读取的二进制格式存储到磁盘上【英文标题】:How to store numpy two dimensional array onto disk as a kind of binary format which can be read with C++ 【发布时间】:2017-08-23 09:08:02 【问题描述】:

我有 python 二维 numpy 数组,我想将它们更改为可以用 C++ 读取的二进制格式,如您所知,C++ 中的二维数组是一种具有两个指针的一维数组,用于定位元素.你能告诉我python中的哪个函数可以用来完成这项工作或任何其他解决方案吗?

【问题讨论】:

我的建议:使用库。我自己使用 HDF5,它具有 Python 和 C++ 的接口。也可以考虑相关的netCDF。我还遇到了this 更具实验性的库。 【参考方案1】:

这对于评论来说太长了,但可能还不够完整,无法单独运行。正如汤姆在您的问题的 cmets 中提到的那样,使用在 python 和 C++ 中保存和加载为明确定义的格式(hdf5.mat)的库可能是最简单的解决方案。如果您不想查找和设置这样的库,请继续阅读。

Numy 可以使用numpy.save 保存数据(请参阅this), 格式(描述here)声明有一个标题,其中包含有关数据类型和数组形状数量的信息,然后是数据。因此,除非您想编写一个功能齐全的解析器(您不想),否则您应该确保 python 始终按 c 顺序将数据保存为 float64(或您想要的任何类型)(fortran 排序是另一种选择)。

然后,C++ 代码只需要检查数组数据类型是float64,使用了正确的顺序,以及数组有多大。分配适当数量的内存,您可以将文件中的字节数直接加载到分配的内存中。要创建二维索引,您需要为分配的内存中的每个“行”分配一个指针数组。

或者只是使用可以为您处理所有这些的库。

【讨论】:

以上是关于如何将 numpy 二维数组作为一种可以用 C++ 读取的二进制格式存储到磁盘上的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SWIG 将 C++ 数组转换为 Python 列表?

将 numpy 数组传递给 c++ 函数并返回 numpy 数组作为输出的最有效方法是啥?

Numpy:如何使用数组的最后一个维度作为值?

numpy如何沿维度拆分数组?

从 numpy 数组获取指针以将图像发送到 C++

初学者用 Python 扩展 C(特别是 Numpy)