C++ 从数组到TypedArray的无限制转换<;标准::复杂<;双倍>>;?
尝试了许多方法,但在编写mex函数时无法使其工作 我有一个来自MATLAB的输入,我将它作为C++ 从数组到TypedArray的无限制转换<;标准::复杂<;双倍>>;?,c++,arrays,matlab,C++,Arrays,Matlab,尝试了许多方法,但在编写mex函数时无法使其工作 我有一个来自MATLAB的输入,我将它作为const MATLAB::data::Array传递给一个方法。这个数组可能包含复杂的数据,有时它只是实数据。因此,在我天真的想法中,最直接的方法应该是,我可以简单地将数组转换为TypedArray,如果数组包含复数,我会得到完整的复数值,如果数组只包含实数,我会得到imag=0的复数值。这似乎是不可能的。。。最后的转换在任何情况下都不被接受,MATLAB甚至在尝试将单个元素从实值数组转换为std::c
const MATLAB::data::Array
传递给一个方法。这个数组可能包含复杂的数据,有时它只是实数据。因此,在我天真的想法中,最直接的方法应该是,我可以简单地将数组转换为TypedArray
,如果数组包含复数,我会得到完整的复数值,如果数组只包含实数,我会得到imag=0的复数值。这似乎是不可能的。。。最后的转换在任何情况下都不被接受,MATLAB甚至在尝试将单个元素从实值数组转换为std::complex
时崩溃
在任何情况下,任何人都可以找到一个< <代码> TypedArray >代码>,这样我就可以在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];
}
}
}
void prepareObject(常量matlab::data::Array&corners,常量matlab::data::Array&facets)
{
size_t N_facet_rows=facets.getDimensions()[0];
size_t N_facet_columns=facets.getDimensions()[1];
matlab::data::TypedArray complex_facets=arrayFactory.createArray(facets.getDimensions());
//将镶嵌面转换为复数数组。
if(facets.getType()==ArrayType::DOUBLE){
std::复合物v;
//输入是双精度的,因此对于每个值初始化一个复数,并将其存储在复数数组中。
v、 imag(0);
对于(int i_r=0;i_r