问题描述
我对 C/C++ 编码中的 MEX 文件有疑问。 我需要向 Matlab 返回一个双复数数组,但我无法做到这一点,也找不到有关它的信息。我通过一些尝试展示了我的代码:
double complex output[nSymb];
nlhs = 1;
plhs[0] = mxCreateDoubleMatrix(nSymb,(mwSize)nlhs,mxCOMPLEX);
// 1º option
plhs[0] = output;
// 2º option
memcpy(plhs,output,nSymb * sizeof(double complex));
// 3º option
plhs = output;
提前致谢。
解决方法
您提到了 C++,所以我展示了一个将 std::vector<double>
复制到 MxArray
对象的示例,同样可以应用于 C 样式数组:
mxArray* CreateDoubleArray(const std::vector<double>& d)
{
mxArray* m = mxCreateDoubleMatrix(d.size(),1,mxComplexity::mxReal); // mxComplexity::mxCOMPLEX
double* pm = mxGetDoubles (m); // mxGetComplexDoubles
for (size_t i=0; i<d.size(); i++)
{
pm[i] = d[i];
}
return m;
}
// ...
// Return value for the Mex:
plhs[0] = CreateDoubleArray(stdVecObj);
您可以将向量的 value_type
更改为 std::complex
,并应用注释中建议的更改来处理复杂类型而不是双精度型。 mxGetComplexDoubles
返回一个 MxDOUBLE_CLASS*
documented here(它只是一个具有 mxDouble 类型的实部和虚部的结构)。