这个问题演示如何使用映射对象将双精度矩阵返回到 MATLAB。
以下适用于非复杂数据:
double *outputPtr;
plhs[0] = mxCreateDoubleMatrix((mwSize)n, (mwSize)m, mxREAL);
outputPtr = mxGetPr(plhs[0]);
Map<MatrixXd> output(outputPtr, n, m);
由于 MATLAB 分别存储矩阵的实数和复数元素而不是交错存储,因此我认为您不能直接映射到MatrixXcd
。这就是我正在尝试的,但它不会写入数据plhs[0]
:
double *outputReal, *outputImag;
plhs[0] = mxCreateDoubleMatrix((mwSize)n, (mwSize)m, mxCOMPLEX);
outputReal = mxGetPr(plhs[0]);
outputImag = mxGetPi(plhs[0]);
MatrixXcd outputMat(n,m);
outputMat.real() = Map<MatrixXd>(outputReal,n,m);
outputMat.imag() = Map<MatrixXd>(outputImag,n,m);
我认为问题在于它将这些地图中的数据复制到outputMat
。因此,这不仅在初始化时进行了不必要的复制,而且对以这种方式分配的矩阵的更改也不会触及输出指针处的数据。
有没有一种方法可以初始化输出矩阵,使其实部和虚部数据存储在mxGetPr(plhs[0])
and mxGetPi(plhs[0])
?