在不使用 matlab 头文件和库的情况下编写 MAT 文件

Posted

技术标签:

【中文标题】在不使用 matlab 头文件和库的情况下编写 MAT 文件【英文标题】:Write a MAT file without using matlab headers and libraries 【发布时间】:2011-02-11 14:43:22 【问题描述】:

我有一些数据想要保存到 MAT 文件(版本 4 或 5,或任何版本,就此而言)。问题:我想在不使用 matlab 库的情况下做到这一点,因为这段代码不需要在带有 matlab 的机器上运行。我的程序使用 Java 和 C++,因此任何现有的实现这一目标的语言库都可以帮助我......

我做了一些研究,但没有在 Java/C++ 中找到任何东西。但是,我发现 python 上的 scipy 使用mio4.pymio5.py 实现了这一点。我想过在 java 或 C++ 上实现这个,但它似乎有点超出我的时间安排。

所以问题是:Java 或 C/C++ 中是否有任何库允许在不使用 Matlab 库的情况下保存 MAT 文件?

非常感谢

【问题讨论】:

我认为您已经找到了 The Mathwork 文档“MAT 文件格式”的副本,并且在您用尽 SO 帮助您找到已经- 编写库? 【参考方案1】:

C:matio 爪哇:jmatio (我真的很想,所以我会告诉你学习谷歌)

但实际上,如果您不需要处理一些更复杂的东西(嵌套结构、类、函数、稀疏矩阵等),使用 fwrite 编写 matfile 并不难。 见:http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/matfile_format.pdf

【讨论】:

前段时间我遇到了类似的问题,最后写了一组函数来替代用于编写 .matfile 的 matlab API。没什么花哨的,但它做了基础知识(包括结构和嵌套)。它在 github 上:github.com/EyNuel/matOut/wiki【参考方案2】:

自版本 7 起的 MAT 文件基于 HDF5。我记得他们使用了一些相当有趣的约定,但你可以对你需要的东西进行逆向工程。肯定有适用于 Java 和 C++ 的 HDF5 编写库。

在这些方面,Matlab 可以读/写多种标准格式,包括 HDF5。在“标准”HDF5 中写入数据并将其读入 Matlab 中所需的数据结构可能是最简单的。

【讨论】:

+1 我以为我在某处读到过,但我去寻找时却找不到确认。您提出了另一种可能性,OP 可以读/写 HDF5 文件,MATLAB 绝对可以处理它自己的 MAT 文件实现可能是什么。 HDF5 是行优先的。垫子是列专业的。 hdf5write 上的当前help 解释了为什么这可能是一件坏事 @kts:是的,但是 Matlab 写入 HDF5 文件的顺序可以切换。在实践中我从来没有发现这是一个问题,尽管我偶尔不得不在 Matlab 或 Fortran 程序中转置矩阵。

以上是关于在不使用 matlab 头文件和库的情况下编写 MAT 文件的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在没有包含保护且没有多个定义错误的情况下编写头文件?

在不违反 SRP、OCP、DRY 的情况下编写测试

我可以在不编写扩展的情况下编写 FlexBuilder 脚本吗?

qt 添加第 3 方头文件和库的路径

是否可以在不使用 main() 函数的情况下编写程序?

是否可以在不使用外部后端的情况下编写 grafana 数据源插件?