用文件转换C++数组到MATLAB大矩阵
在我的代码中,我更改了数组int*,然后我想将它与matlab结果进行比较 因为我的数组是1200 X 1000的大元素。这需要花费很长时间才能加载到matlab中 我正在尝试将打印的输出文件复制到matlab命令行用文件转换C++数组到MATLAB大矩阵,c++,arrays,matlab,matrix,C++,Arrays,Matlab,Matrix,在我的代码中,我更改了数组int*,然后我想将它与matlab结果进行比较 因为我的数组是1200 X 1000的大元素。这需要花费很长时间才能加载到matlab中 我正在尝试将打印的输出文件复制到matlab命令行 for (int i = 0; i < _roiY1; i++) { for (int j = 0; j < newWidth; j++) { channel_gr[i*newWidth + j] = clipLevel; } }
for (int i = 0; i < _roiY1; i++)
{
for (int j = 0; j < newWidth; j++)
{
channel_gr[i*newWidth + j] = clipLevel;
}
}
ofstream myfile;
myfile.open("C:\\Users\\gdarmon\\Desktop\\OpenCVcliptop.txt");
for (int i = 0; i < newHeight ; i++)
{
for (int j = 0; j < newWidth; j++)
{
myfile << channel_gr[i * newWidth + j] << ", ";
}
myfile<<";" <<endl;
}
<>有没有一种更快的方法来创建C++的可读矩阵数据?进入matlab?最简单的答案是,以二进制形式传输数据要快得多,而不是像问题中建议的那样,将数据渲染为文本并让matlab将其解析回二进制。可以通过在C/C++端使用fwrite和在Matlab端使用fread来实现这一点
int* my_data = ...;
int my_data_count = ...;
FILE* fid = fopen('my_data_file', 'wb');
fwrite((void*)my_data, sizeof(int), my_data_count, fid);
fclose(fid);
在Matlab中:
fid = fopen('my_data_file', 'r');
my_data = fread(fid, inf, '*int32');
fclose(fid);
可能值得注意的是,您可以在Matlab中调用C/C++函数,因此根据您所做的工作,查找mex文件可能更容易。最简单的答案是以二进制形式传输数据更快,而不是——正如问题中所建议的那样——渲染文本并让Matlab将其解析回二进制。可以通过在C/C++端使用fwrite和在Matlab端使用fread来实现这一点
int* my_data = ...;
int my_data_count = ...;
FILE* fid = fopen('my_data_file', 'wb');
fwrite((void*)my_data, sizeof(int), my_data_count, fid);
fclose(fid);
在Matlab中:
fid = fopen('my_data_file', 'r');
my_data = fread(fid, inf, '*int32');
fclose(fid);
可能值得注意的是,您可以从Matlab中调用C/C++函数,因此根据您正在执行的操作,查找mex文件可能会更容易。不要将输出编写为文本 以Matlab喜欢的方式将矩阵写入输出文件:大二进制数组
ofstream myfile;
myfile.open("C:\\Users\\gdarmon\\Desktop\\OpenCVcliptop.txt", ofstream::app::binary);
myfile.write((char*) channel_gr, newHeight*newWidth*sizeof(channel_gr[0]));
由于matlab喜欢查看数据的方式,您可能希望在输出上玩一些游戏,以获得按数组排序的列行而不是列行。我记得在为文件阅读器编写mex文件插件时,性能有了几个数量级的提高,但我已经有一段时间没有这样做了。不要将输出作为文本写入 以Matlab喜欢的方式将矩阵写入输出文件:大二进制数组
ofstream myfile;
myfile.open("C:\\Users\\gdarmon\\Desktop\\OpenCVcliptop.txt", ofstream::app::binary);
myfile.write((char*) channel_gr, newHeight*newWidth*sizeof(channel_gr[0]));
由于matlab喜欢查看数据的方式,您可能希望在输出上玩一些游戏,以获得按数组排序的列行而不是列行。我记得在为文件阅读器编写mex文件插件时,性能有了几个数量级的提高,但我已经有一段时间没有这么做了