使用文件将c ++数组转换为matlab大矩阵

时间:2015-05-11 20:34:46

标签: c++ arrays matlab matrix

在我的代码中,我正在更改我的数组(int *),然后我想将它与matlab结果进行比较。

因为我的数组是大1200 X 1000元素。这需要永远将其加载到matlab

我正在尝试将打印输出文件复制到matlab命令行...

callback

有没有更快的方法从c ++创建可读矩阵数据?进入matlab?

2 个答案:

答案 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文件插件时,性能有了几个等级的改进,但是自从我完成它已经有一段时间了。