c - 如何将数据从 C 导出到 MATLAB(在不同机器上)

标签 c linux matlab

我正在 Linux 集群上的 C 程序中生成 long double float 数据。我需要将数据导出到集群上未安装的 Matlab。

什么是最好的方法?我的顾问说要使用 printf 语句导出。我假设他的意思是将数据发送到逗号分隔的文件(和 fprintf)。但在我看来,这可能会很慢并且会占用太多内存,而且我们可能会失去很多精度。

我找到了 this web page用于读取和写入 .MAT 文件,但我不太了解该页面,或者 the example ,我将其复制到我的集群,但无法编译(因为它缺少显然来自 MATLAB 的库。

将数据从 Linux/C 导出到 Windows/MATLAB 的最佳、最简单或最快的方法是什么?我如何开始使用该方法?当您回答说我是 C 的新手并且可能需要帮助来弄清楚如何获取、安装、配置和链接任何库时,请注意。但一旦完成,我认为我很擅长学习使用它们。

最佳答案

为什么你认为你会失去精度? CSV 的唯一缺点是 ASCII 文件需要比二进制文件多得多的存储空间,但在当今时代,您只需理发一次就能获得数 TB 的存储空间,这似乎不是问题。

如果您在千兆字节上写入千兆字节,它只会明显变慢,但通常计算需要更长的时间,以至于 ASCII 和二进制之间的差异完全可以忽略不计(如果计算花这么长时间:那你为什么需要一个集群?)

无论如何,我会选择 ASCII——如何写入和读取一些二进制 blob 需要在两个地方记录,在写入端和读取端更容易产生错误,更难解决它们,因为没有人可以读取该文件等。此外,MAT 文件格式可能会在下一个 Matlab 版本中发生变化(就像过去一样)。

使用 ASCII,你没有这些问题,我能想到的唯一缺点是你必须在 Matlab 中编写一个小型的特定于集群的文件阅读器(这仍然比解决所有错误和工作要少得多)维护一个 MAT 文件编写器)。

无论如何,在 Matlab 中有大量用于 ASCII 的工具:textreaddlmreadimportdata 等等。在 C 端,确实只需使用 fprintf(文档 here)。

关于c - 如何将数据从 C 导出到 MATLAB(在不同机器上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13168498/

相关文章:

matlab - Parfor切片变量导致Matlab崩溃

c - c中的结构内存分配和malloc()

用 C 中的函数更改数组?

java - CentOS 上的 Artifactory 环境变量

c++ - 排序 float

performance - 通过交错复制 3D 阵列的页面构建邻接矩阵

c - 通过arm c内联汇编器操作内存中的数组

c++ - 指针比较 "<"与数组对象的最后一个元素

c++ - 如何在 Linux 上创建 .desktop 文件应用程序启动器?

linux - 是否可以附加到已经运行的 gdb 进程?