[英]How to save a c++ readable .mat file
我在matlab中运行DCT代码,我想将压缩文件( .mat
)读为ac代码。 但是,不确定这是正确的。 我尚未完成代码,但我想请求解释如何从.mat
文件创建c ++可读文件。
当涉及.mat
, .txt
以及二进制,浮点文件详细信息时,我有点困惑。 有人请向我解释一下。
似乎您在这里有很多选择,具体取决于您的确切需求,时间和技能水平(在Matlab和C ++中)。 显而易见的是:
ASCII文件
您可以使用save(filename, variablename, '-ascii')
语法在Matlab中生成ASCII文件,也可以使用c样式的fprintf
命令创建更自定义的格式。 然后,在C或C ++程序中,使用fscanf
读取文件。
这通常是最简单的,并且在许多情况下足够好。 人们可以使用notepad ++,emacs等读取文件,这是一个很好的检查(尽管它经常被高估)。
有两个很大的缺点。 首先,文件非常大(8字节的双精度数字需要大约19个字节才能以ASCII格式存储)。 其次,您必须非常小心,以将不可避免的精度损失降至最低。
字节- -一盘上
对于一个简单的数字数组(例如,一个32 x 32的双精度数组),您可以简单地使用fwrite
Matlab函数将其写入磁盘。 然后在C / C ++中使用并行fread
功能。
这不会损失精度,非常快,并且磁盘上的大小相对较小。
这种方法的缺点是不必保存复杂的Matlab结构。
Mathworks提供的C库
由于这是一个非常普遍的问题,Mathworks实际上已经通过对* .mat文件进行读取/写入所需功能的直接C实现来解决了这一问题。 我没有使用过这个特定的库,但是通常它们提供的库很容易集成。 从此处开始可以找到一些文档: http : //www.mathworks.com/help/matlab/read-and-write-matlab-mat-files-in-cc-and-fortran.html
这是一个非常强大的解决方案,并且对更改相对不敏感,因为它是受支持的主流Matlab工具集的一部分。
基于HDF5的* .mat文件
在最新版本的Matlab中,您可以使用符号save(filename, variablename, '-v7.3');
强制Matlab以基于HDF5的格式保存文件。 然后,您可以使用HDF5组中的工具来处理文件。 请注意一个不错的,基于Java的GUI查看器( http://www.hdfgroup.org/hdf-java-html/hdfview/index.html#download_hdfview )和C,C ++和Fortran库。
这是存储二进制数据的非脆弱方法。 使库在您的代码中工作还需要一些工作。
缺点之一是Mathworks可能会更改如何将Matlab数据类型映射到HDF5文件的详细信息。 如果您真的想变得健壮,则可以尝试...
自定义HDF5文件
不仅仅是采用Mathworks决定使用的任何格式,直接创建HDF5文件并将数据从Matlab推送到其中也不是那么困难。 这使您可以控制诸如压缩,块大小调整,数据集层次结构和名称之类的事情。 它还使您免受将来默认* .mat文件格式的任何更改。 参见Matlab中的h5write
命令。
从C / C ++端开始运行仍然需要一些努力,因此,只有在您的项目允许的情况下,我才会沿着这条道路走。
.mat
是MATLAB本身的特殊格式。 您可以做的是将.mat
文件加载到MATLAB工作区中:
load file.mat
然后使用fopen
和fprintf
将数据写入file.txt
,然后可以在C中读取该文件的内容。
您也可以使用matlab的dlmwrite写入定界的asci文件,该文件将很容易用C语言读取(并且也是人类可读的),尽管如果这是问题的核心,它可能没有压缩的程度。
除了已经提到的内容,您还可以使用-ascii从MATLAB保存数据。
save x.mat x
变为:
save x.txt x -ascii
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.