3

我有一个文本文件作为 c++ 程序的输出。它实际上是一个 3x100x200 元素矩阵。超过 200 个时间戳的 3x100 2d 矩阵。我想存储它,以便我可以将它加载到 Matlab 工作区中,然后在 3d 图中将其可视化。我无法弄清楚文本文件的结构。至于我应该在哪里放一个“[..]”,在哪里放“;” 并且其中有“”或“,”。

有人可以举个例子,以便我可以以这种方式从 c++ 代码中打印出文件

4

5 回答 5

4

忘记文本文件。相反,使用Matio 库编写.mat文件。这样,您将能够在需要时快速添加更多数据字段。

如果你真的想使用文本文件,你可以先写矩阵尺寸,然后是所有元素,最后按照这里的建议进行一些整形。

于 2012-10-26T09:27:55.400 回答
3

我发现了一个没有使用任何额外库的 hack。我只是将每个二维矩阵输出为 outMat(:,:,matIndex) 并在循环中递增 matIndex 。然后我在 matlab 中将 .m 作为脚本运行。

void printArrs(){
    int i;
//  B(:,:,1) = [1 2 3; 4 5 6];
//  B(:,:,2) = [7 8 9; 0 0 0];
    ofstream outFile;
    outFile.open ("forPlot.m", ios::out | ios::app);
    matIndex++;
    outFile << "outMat(:,:," << matIndex << ") = [";
    for(i=0;i<fftLen;i++){
        outFile << Mag[0][i] << " ";
        outFile << Mag[1][i] << " ";
        outFile << Mag[2][i] << ";" << endl;
    }
    outFile << "];" << endl;
    outFile.close();
}

谢谢大家的回答。对于某些答案,我猜我不够清楚,因为他们认为我想写“来自”Matlab 而不是“到”Matlab,而这是另一种方式。

于 2012-10-26T11:07:49.767 回答
1

尝试谷歌搜索“.csv”以找出逗号分隔的变量文件是什么。这应该会有所帮助,如果我没记错的话,您可以将它们导入 Matlab。

于 2012-10-26T09:22:22.903 回答
1

如果您真的想使用文本文件,尽管我建议您使用前面提到的 Matio 库,您可以通过将其重塑为 2D 来保存 3D 数组,并在阅读后将其重塑为 3d。看看这个简单的 MATLAB 代码。它将 3D 矩阵写入 csv 文件。写入后,csv 文件包含一个二维矩阵,其中第二维和第三维作为向量流式传输:

A = rand(3,10,10);
csvwrite('data.txt', A);

B = csvread('data.txt');
% B is now 3 x 100 matrix, so you need to reshape
B = reshape(B, 3, 10, 10);
于 2012-10-26T10:38:59.903 回答
0

最好将其保存到 .mat 文件中。您不必以这种方式打扰文件结构。请参阅保存功能
的文档。编辑:我误读了这个问题,没有意识到您正在尝试将矩阵保存在 C++ 中。我建议你听从 Pukku 的建议并使用 Matio 库。

要在 Matlab 中加载.mat 文件,只需使用

load('myfile.mat')

这会将矩阵放在您的工作区中。

于 2012-10-26T09:23:02.737 回答