我有一个文本文件作为c ++程序的输出。它实际上是一个3x100x200元素矩阵。超过200个时间戳的3x100 2d矩阵。我想存储它,以便我可以在Matlab工作区中加载它,然后在3d图中将其可视化。我无法弄清楚文本文件的结构。因为在哪里我应该放一个“[..]”和“;”以及“”或“,”。
有人可以举个例子,这样我就能以这种方式从c ++代码中打印出文件
答案 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)