我有一个文本文件作为 c++ 程序的输出。它实际上是一个 3x100x200 元素矩阵。超过 200 个时间戳的 3x100 2d 矩阵。我想存储它,以便我可以将它加载到 Matlab 工作区中,然后在 3d 图中将其可视化。我无法弄清楚文本文件的结构。至于我应该在哪里放一个“[..]”,在哪里放“;” 并且其中有“”或“,”。
有人可以举个例子,以便我可以以这种方式从 c++ 代码中打印出文件
忘记文本文件。相反,使用Matio 库编写.mat
文件。这样,您将能够在需要时快速添加更多数据字段。
如果你真的想使用文本文件,你可以先写矩阵尺寸,然后是所有元素,最后按照这里的建议进行一些整形。
我发现了一个没有使用任何额外库的 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,而这是另一种方式。
尝试谷歌搜索“.csv”以找出逗号分隔的变量文件是什么。这应该会有所帮助,如果我没记错的话,您可以将它们导入 Matlab。
如果您真的想使用文本文件,尽管我建议您使用前面提到的 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);