【发布时间】:2012-10-26 09:18:59
【问题描述】:
我有一个文本文件作为 c++ 程序的输出。它实际上是一个 3x100x200 元素矩阵。超过 200 个时间戳的 3x100 2d 矩阵。我想存储它,以便我可以将它加载到 Matlab 工作区中,然后在 3d 图中将其可视化。我无法弄清楚文本文件的结构。至于我应该在哪里放一个“[..]”,在哪里放“;”以及“”或“,”的位置。
有人可以举个例子,以便我可以以这种方式从 c++ 代码中打印出文件
【问题讨论】:
我有一个文本文件作为 c++ 程序的输出。它实际上是一个 3x100x200 元素矩阵。超过 200 个时间戳的 3x100 2d 矩阵。我想存储它,以便我可以将它加载到 Matlab 工作区中,然后在 3d 图中将其可视化。我无法弄清楚文本文件的结构。至于我应该在哪里放一个“[..]”,在哪里放“;”以及“”或“,”的位置。
有人可以举个例子,以便我可以以这种方式从 c++ 代码中打印出文件
【问题讨论】:
忘记文本文件。相反,使用Matio library 编写.mat 文件。这样您就可以在需要时快速添加更多数据字段。
如果你真的想使用文本文件,你可以先写矩阵维度,然后是所有元素,最后按照here的建议进行一些整形。
【讨论】:
我发现了一个没有使用任何额外库的 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,而这是另一种方式。
【讨论】:
data.txt 并在 C++ 中生成相同外观的东西。这很简单。关键是你必须编写二维数组并重塑。但是,您可以简单地编写一个 .m 文件,这确实是事实 :) 干得好。尽管考虑更大矩阵的二进制输出。它快得多。
尝试谷歌搜索“.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);
【讨论】:
【讨论】: