簡體   English   中英

將特征復數矩陣返回到墨西哥 function 中的 matlab,無需額外復制

[英]Return eigen complex matrix to matlab in mex function without extra copy

此問題顯示如何使用 map object 將雙矩陣返回到 matlab。 通過 C++ 特征矩陣到 Matlab mex output以下適用於非復雜數據。

double *outputPtr;
plhs[0] = mxCreateDoubleMatrix((mwSize)n, (mwSize)m, mxREAL);
outputPtr = mxGetPr(plhs[0]);
Map<MatrixXd> output(outputPtr, n, m);

由於 matlab 分別存儲矩陣的實數和復數元素而不是交錯存儲,我認為您不能將 map 直接存儲到 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 的實部和虛部。 因此,這不僅會在初始化時進行不必要的復制,而且以這種方式分配的矩陣的更改不會觸及 output 指針處的數據。

有沒有辦法初始化 output 矩陣,使其實數和虛數數據將存儲在 mxGetPr(plhs[0]) 和 mxGetPi(plhs[0]) 中?

感謝 Cris Luengo 為我指明了正確的方向。 這就是我要工作的地方。

plhs[0] = mxCreateDoubleMatrix((mwSize)n, (mwSize)m, mxCOMPLEX);
auto* Poutput = reinterpret_cast<complex<double>*>(mxGetComplexDoubles(plhs[0]));
Map<MatrixXcd> output(Poutput, n, m);

然后在編譯時確保為 mex 提供 -R2018a 標志,該標志將為交錯的復雜數據構建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM