Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将3D矩阵存储在文本文件中,以便导入Matlab? 我有一个文本文件作为C++程序的输出。它实际上是一个3x100x200元素矩阵。200个时间戳上的3x100个2d矩阵。我想把它存储起来,这样我就可以把它加载到Matlab工作区中,然后在3d绘图中可视化它。我无法理解文本文件的结构。比如我应该在哪里加“[…]”和“在哪里”;“在哪里加”“或”,” 请举例说明,这样我就可以在C++文件中以这种方式打印出文件_C++_Matlab_Io - Fatal编程技术网

如何将3D矩阵存储在文本文件中,以便导入Matlab? 我有一个文本文件作为C++程序的输出。它实际上是一个3x100x200元素矩阵。200个时间戳上的3x100个2d矩阵。我想把它存储起来,这样我就可以把它加载到Matlab工作区中,然后在3d绘图中可视化它。我无法理解文本文件的结构。比如我应该在哪里加“[…]”和“在哪里”;“在哪里加”“或”,” 请举例说明,这样我就可以在C++文件中以这种方式打印出文件

如何将3D矩阵存储在文本文件中,以便导入Matlab? 我有一个文本文件作为C++程序的输出。它实际上是一个3x100x200元素矩阵。200个时间戳上的3x100个2d矩阵。我想把它存储起来,这样我就可以把它加载到Matlab工作区中,然后在3d绘图中可视化它。我无法理解文本文件的结构。比如我应该在哪里加“[…]”和“在哪里”;“在哪里加”“或”,” 请举例说明,这样我就可以在C++文件中以这种方式打印出文件,c++,matlab,io,C++,Matlab,Io,尝试Google“.CSV”来找出逗号分隔的变量文件是什么。这应该会有帮助,如果我没记错的话,您可以将它们导入Matlab。最好将其保存到.mat文件中。这样您就不必费心处理文件结构了。 请参阅函数的文档编辑< /强>:我误解了这个问题,没有意识到你试图在C++中保存矩阵。我建议你听从Pukku的建议,使用Matio图书馆 要在Matlab中创建.mat文件,只需使用 load('myfile.mat') 这会将矩阵放入您的工作区。忘记文本文件。相反,请使用编写一个.mat文件。通过这种方式,

尝试Google“.CSV”来找出逗号分隔的变量文件是什么。这应该会有帮助,如果我没记错的话,您可以将它们导入Matlab。

最好将其保存到.mat文件中。这样您就不必费心处理文件结构了。
请参阅函数的文档<强>编辑< /强>:我误解了这个问题,没有意识到你试图在C++中保存矩阵。我建议你听从Pukku的建议,使用Matio图书馆

要在Matlab中创建.mat文件,只需使用

load('myfile.mat')

这会将矩阵放入您的工作区。

忘记文本文件。相反,请使用编写一个
.mat
文件。通过这种方式,您将能够在需要时快速添加更多的数据字段

如果你真的想使用文本文件,你可以先写矩阵尺寸,然后写所有元素,最后按照建议做一些重塑。

如果你真的想使用文本文件,尽管我建议你使用前面提到的Matio库,你可以通过将3D数组重塑为2D来保存它,阅读后将其重塑为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);

我发现了一个没有使用任何额外lib的hack。 我只是将每个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();
}
void printArrs(){
int i;
//B(:,:,1)=[123;456];
//B(:,:,2)=[789;020];
出流孔的直径;
outFile.open(“forPlot.m”,ios::out | ios::app);
matIndex++;

但是,我不是喜欢用C++程序编写的OP程序吗?不管怎样,我已经很享受在McAO库中用C++程序编写.Mat文件了。@ Puku:你说的对,我在某种程度上跳过了C++。但是MaTio看起来很有用。如果你在回答我的答案,我只是写了MATLAB脚本,这样你就可以看<代码>数据。>在Matlab中生成并在C++中产生相同的外观。这很简单。重点是你必须编写2D数组和整形。但是,你可以简单地写一个M文件:这是正确的。好的工作。虽然考虑二进制输出更大的矩阵。它快得多。