我有一个文本文件,是由c++程序输出的。实际上它是一个3x100x200的元素矩阵。这个矩阵包含了200个时间戳的3x100二维矩阵。我想将其存储到Matlab工作区,并在三维图形中进行可视化。但我无法确定文本文件的结构。不知道应该在哪里放"[..]",在哪里放";",在哪里放" "或","。
请问有人能够给出一个示例,以便我可以从c++代码中以这种方式打印出文件吗?
我发现了一种无需使用额外库的技巧。我只是将每个2D矩阵输出为outMat(:,:,matIndex),并在循环中递增matIndex。然后我将.m文件作为脚本在Matlab中运行。
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();
}
如果您真的想使用文本文件,尽管我建议您使用前面提到的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);
尝试在谷歌上搜索“.csv”以了解逗号分隔变量文件是什么。这应该会有所帮助,如果我没记错的话,你可以将它们导入Matlab。
data.txt
,并在C ++中产生相同外观的东西。这很简单。关键是你必须写2D数组和reshape。但是说实话,你可以简单地编写.m文件:)干得好。尽管考虑使用二进制输出来处理更大的矩阵。它快得多。 - angainor