[英]Copy boost::multi_array of std::complex values to mxArray
我正在尝试将 std::complex 值的 boost::multi_array 复制到 mxArray 以便我可以将值写入 MATLAB .mat 文件。 当我将 .mat 文件加载到 MATLAB 中时,它只有数据的实部,没有虚部。 这是一个代码片段,显示了我在做什么。
boost::multi_array<std::complex<double>, 3> SAP_max_combined_complex(boost::extents[1][1][1], boost::fortran_storage_order());
// Later in the code
SAP_max_combined_complex.resize(boost::extents[xDim][yDim][zDim]);
// The multi_array is populated correctly - this has been verified
mwSize numDims = SAP_max_combined_complex.num_dimensions();
mwSize outputSizes[3] = {SAP_max_combined_complex.shape()[0], SAP_max_combined_complex.shape()[1], SAP_max_combined_complex.shape()[2]};
mxArray* outputData = mxCreateNumericArray(numDims, outputSizes, mxDOUBLE_CLASS, mxCOMPLEX);
memcpy(mxGetData(outputData), (void*) SAP_max_combined_complex.data(), (sizeof(std::complex<double>) * SAP_max_combined_complex.num_elements()));
// I then write the mxArray to the file with
matPutVariable(mpMatFile, fieldName.toStdString().c_str(), outputData);
另外一个有趣的注意事项是,如果当我进行 memcpy 调用时,SAP_max_combined_complex 的解除分配在我终止我的应用程序时崩溃。 如果我注释掉 memcpy 调用,则解除分配工作正常(或至少不会崩溃)。
任何想法我做错了什么? 谢谢!
Matlab 将实部和虚部存储为单独的数组。 mxGetData() 只返回指向实部的指针!
另一方面,您的方法(主要是因为 std::complex)将实部和虚部成对存储。
您需要解开实部和虚部对并将它们写入单独的数组中(实部转到 mxGetData(),而 imag 部分转到 mxGetImagData())。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.