我编写了一个 C++ 程序,其唯一目的是调用 Matlab 代码。我有一个主要例程,其中
将文件(高维 90000*24 的矩阵)中的数据读入 C++ 结构
将这些结构传递给 Matlab 代码
在参数中使用这些结构启动 Matlab 例程
从 Matlab 获取输出数据并将它们存储在 C++ 结构中
在 2/ 中,矩阵是 Matlab 结构中的字段。说,该结构MATLAB_STRUCT
有几个矩阵字段,,,MATLAB_STRUCT.Z1
...MATLAB_STRUCT.Z2
和一些浮点字段MATLAB_STRUCT.flt1
,...
double**
将 C++ 矩阵 ( ) 设置为 Matlab 结构的字段的正确方法是什么?到目前为止,我想出了这个,使用engine.h
mxArray* labcoeffs_array = convertVectorToMxArray(labcoeffs,
coeff_nrows, coeff_ncols);
const std::string lab_coeff_name = "MATLAB_STRUCT.labCoef";
engPutVariable(ep, lab_coeff_name.c_str(), labcoeffs_array);
我写的要转换为 aconvertVectorToMxArray
的助手在哪里,double**
mxArray
inline mxArray *convertVectorToMxArray(double** mat,
const int nb_rows, const int nb_cols)
{
mxArray *outputMxArray = mxCreateDoubleMatrix(
(int) nb_rows,
(int) nb_cols,
mxREAL);
double *data = (double*) mxGetData(outputMxArray);
for (int r = 0; r < nb_rows; r++)
for (int c = 0; c < nb_cols; c++)
data[r + c*nb_rows] = (double)mat[r][c];
return outputMxArray;
};
但是我已经看到了一些其他技术,用于在 Cpp 代码中为 Matlab 结构分配值(虽然是浮点值,而不是矩阵),模仿 C++ 字符串中的命令行语法:
std::string setStruct = "MATLAB_STRUCT" + "." + "nB" + " = " + str->nB + ";";
matlabExecute(ep, setStruct);
带有ep
指向 Matlab 引擎的指针。
是否可以使用命令行调整这种方法以将值分配给 Matlab 结构的矩阵类型字段?
为 Matlab 结构的矩阵类型字段赋值的最佳方法是什么?