如何在文本文件中存储3D矩阵,以便将其导入Matlab?

时间:2012-10-26 09:18:59

标签: c++ matlab io

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

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

5 个答案:

答案 0 :(得分:4)

忘记文本文件。而是使用Matio library编写.mat文件。这样,您就可以在需要时快速添加更多数据字段。

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

答案 1 :(得分:3)

我发现黑客没有使用任何额外的库。 我只输出每个2d矩阵作为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,而它是另一种方式。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果确实想要使用文本文件,虽然我建议您使用前面提到的Matio库,但您可以通过将其重新整形为2D来编写3D数组并将其重新整形为你读完之后的3d。看看这个简单的MATLAB代码。它将3D矩阵写入csv文件。写完之后,csv文件包含一个2D矩阵,第二个和第三个维度流式传输为矢量:

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);

答案 4 :(得分:0)

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

要在Matlab中load一个.mat文件,只需使用

load('myfile.mat')

将矩阵放在工作区中。