繁体   English   中英

如何保存C ++可读.mat文件

[英]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

然后使用fopenfprintf将数据写入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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM