Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
用文件转换C++数组到MATLAB大矩阵_C++_Arrays_Matlab_Matrix - Fatal编程技术网

用文件转换C++数组到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; } }

在我的代码中,我更改了数组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;
    }
}

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文件插件时,性能有了几个数量级的提高,但我已经有一段时间没有这么做了