【发布时间】:2019-12-10 03:31:51
【问题描述】:
我有一个 C 程序,它重复执行算法并在每次迭代后输出其中间结果。数据将使用 Matlab R2019a 进行处理。
我正在使用C Matrix API 创建 .MAT 文件,并且可以将矩阵写入 .MAT 文件:
MATFile *m = matOpen("matlab.MAT", "w");
mxArray *a = mxCreateDoubleMatrix(1, 1, mxREAL);
*mxGetPr(a) = nxm;
matPutVariable(m, "nxm", a);
mxDestroyArray(a);
matClose(m);
但是,[maxPutVariable](https://www.mathworks.com/help/matlab/apiref/matputvariable.html) 的文档指出,如果我两次使用相同的变量名,第二次将覆盖第一次。
我不想将所有中间值存储在内存中。也许我可以读入矩阵,扩展它以包含一个新值,然后再写出来。
有没有使用 C API 的不错的方法来做到这一点,还是我应该只编写 Matlab 代码来解析不同的输出格式?
【问题讨论】:
-
MAT 文件格式对于数值数组数据非常有效。你的中间结果有多大? I/O 性能在这里很重要吗?并且您的下游 Matlab 进程是否需要在您的 C 程序仍在运行时处理一些结果,还是可以等到 C 程序完成并一次处理它们?
-
(我暂时认为您会将每个中间结果放入不同的
nxmNNNN变量中,其中NNNN是您的循环索引或其他任何内容,然后将其读入 Matlab 并拥有它cat()所有的nxmNNN变量;那只是几行代码。)
标签: matlab