在我的代码中,我正在更改我的数组(int *),然后我想将它与matlab结果进行比较。
因为我的数组是大1200 X 1000元素。这需要永远将其加载到matlab
我正在尝试将打印输出文件复制到matlab命令行...
callback
有没有更快的方法从c ++创建可读矩阵数据?进入matlab?
答案 0 :(得分:2)
最简单的答案是,以二进制形式传输数据要快得多,而不是像问题中所建议的那样 - 渲染到文本并让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文件")。
答案 1 :(得分:2)
不要将输出写为文本。
将您的矩阵写入输出文件,就像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文件插件时,性能有了几个等级的改进,但是自从我完成它已经有一段时间了。