尝试了很多事情,编写mex函数时无法使它正常工作。
我有来自MATLAB的输入,我将其作为const matlab::data::Array
传递给方法。该数组可能包含复杂数据,有时只是真实数据。因此,根据我的幼稚想法,最简单的方法应该是将数组简单地转换为TypedArray<std::complex<double>>
,如果数组包含复杂值,我将获得完整的复杂值;如果数组仅包含复杂值,则我将获得imag = 0的复杂值。真实值(value)。似乎不可能...在任何情况下都不会接受最后一次转换,并且MATLAB甚至在尝试将单个元素从实值数组转换为std::complex<double>
时都崩溃了。
有人解决方案如何在所有情况下都获取TypedArray<std::complex<double>>
,以便我可以在C++代码中使用它吗?
最佳答案
我的人生故事,经过几个小时的尝试,在这里发表之后,我发现在半小时内就能解决问题……以下代码似乎可以完成这项工作:
void prepareObject(const matlab::data::Array& corners, const matlab::data::Array& facets)
{
size_t N_facet_rows = facets.getDimensions()[0];
size_t N_facet_columns = facets.getDimensions()[1];
matlab::data::TypedArray<std::complex<double>> complex_facets = arrayFactory.createArray<std::complex<double>>(facets.getDimensions());
// Convert the facets to a complex-valued array.
if (facets.getType() == ArrayType::DOUBLE) {
std::complex<double> v;
// Input is DOUBLE, so for each value init a complex<double> and store that in the complex array.
v.imag(0);
for (int i_r = 0; i_r < N_facet_rows; i_r++) {
for (int i_c = 0; i_c < N_facet_columns; i_c++) {
v.real(facets[i_r][i_c]);
complex_facets[i_r][i_c] = v;
}
}
}
else {
// Input is COMPLEX_DOUBLE, so simply copy all values.
for (int i_r = 0; i_r < N_facet_rows; i_r++) {
for (int i_c = 0; i_c < N_facet_columns; i_c++) {
complex_facets[i_r][i_c] = (std::complex<double>) facets[i_r][i_c];
}
}
}
关于c++ - 从数组到TypedArray <std::complex <double >>的无限制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64614235/