如何将 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 列表?