我正在尝试从 c++ 中获取一个矩阵并将其导入 Matlab 以在该矩阵上运行 bintprog,称之为 m。我的 c++ 代码生成了这些特定类型的矩阵,我需要在它们上快速运行 bintprog,最好使用数百万个矩阵。
因此,以下任何一项都会很棒:一种一次导入一堆矩阵的方法,这样我就可以通过我的 Matlab 代码运行大量迭代。或者,如果我可以很好地在 C++ 中实现 Matlab 代码。
如果不清楚,请给我评论,我会更新我能做的。
我建议使用简单的解决方案,假设您的矩阵保存在 3 维数组中:
在 C++ 中构建一个循环,以保存您的矩阵......这样的事情:
ofstream arquivoOut0("myMatrices.dat");
for(int m=0;m<numberMatrices;m++){
for (int i=0; i< numberlines;i++){
for(int j=0;j<numberColumns;j++)
if(j!=numberColumns-1) arquivoOut0<< matrices[m][i][j] << "\t";
else arquivoOut0<< matrices[m][i][j] << "\n";
}
}
}
arquivoOut0.close();
好的。您已将矩阵保存在 ascii 文件中!现在你必须在 Matlab 中阅读它!
load myMatrices.dat
for m=1:numberMatrices
for i=1:numberLines
for j=1:numberColumns
myMatricesInMatlab(m,i,j)=myMatrices((m-1)*numberLines+i,j);
end
end
end
现在,您可以使用所需的工具箱:
for i=1:numberMatrices
Apply the toolbox for myMatricesInMatlab(i,:,:);
end
我认为它有效,处理时间不是问题!
您可以从 C++ 代码调用 Matlab 命令(反之亦然):
将 C++ 代码编译为mex
函数并bintprog
使用mexCallMatlab
.
正如 Mark 所提议的,您可以使用matlab engine 从本机 C++ 代码调用 Matlab 引擎。
您可以将您的 C++ 代码编译为共享库,并使用calllib
.