在 MEX 文件 (Matlab) 中返回双复数数组

问题描述

我对 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 类型的实部和虚部的结构)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...