如何设置填充了mxSetData的mxArray的classID? 我试图使用 MEX .H./Cuth>标头将我编写的C++程序转换成MATLAB命令,但不知道它们的MxRealStult是如何工作的。
假设我有一个名为如何设置填充了mxSetData的mxArray的classID? 我试图使用 MEX .H./Cuth>标头将我编写的C++程序转换成MATLAB命令,但不知道它们的MxRealStult是如何工作的。,c++,matlab,mex,C++,Matlab,Mex,假设我有一个名为data的std::vector,我想把它转换成一个mxArray,我可以返回到matlab,我必须这样做,对吗 mxSetData(plhs[0], static_cast<void*>(&(*(data.begin())))); mxSetN(plhs[0], data.size()); mxSetM(plhs[0], 1); mxSetData(plhs[0],静态_cast(&(*(data.begin()))); mxSetN(plhs[0],da
data
的std::vector
,我想把它转换成一个mxArray,我可以返回到matlab,我必须这样做,对吗
mxSetData(plhs[0], static_cast<void*>(&(*(data.begin()))));
mxSetN(plhs[0], data.size());
mxSetM(plhs[0], 1);
mxSetData(plhs[0],静态_cast(&(*(data.begin())));
mxSetN(plhs[0],data.size());
mxSetM(plhs[0],1);
但是matlab怎么知道我要发送的
mxArray
的mxClassID
是mxSINGLE_类
?为什么我不应该对双重数据使用mxSetData
?为什么mxSetClassID不存在?似乎需要将dfineplhs[0]
作为float
类型进行预处理,然后设置指针
plhs[0] = mxCreateNumericMatrix( 1, data.size(), mxSINGLE_CLASS, mxREAL );
void* oldAllocation = mxGetData( plhs[0] ); // for de-allocation
mxSetData(plhs[0], static_cast<void*>(&(*(data.begin()))));
mxFree( oldAllocation );
好的,首先谢谢你的回答。我确信数据将被释放事实上我没有使用向量,我按照帮助中的建议使用mexMalloc分配了指针。我必须说,你的解决方案在我看来非常不合逻辑,因为你需要分配两倍的内存(可能创建一个小矩阵不起作用?…无论如何,这仍然很难看)@matovitch那么为什么不使用
mxCreateNumericMatrix
直接设置plhs[0]
来分配指针呢?这是一个更好的选择……但我仍然想知道为什么他们没有提供类似mxSetClassID
的想法?
plhs[0] = mxCreateNumericMatrix( 1, data.size(), mxSINGLE_CLASS, mxREAL );
float* dst = (float*)mxGetData( plhs[0] );
for ( int i = 0 ; i < data.size(); i++ ) {
dst[i] = data[i];
}
// or use memcpy instead of the loop