Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从数组到TypedArray的无限制转换<;标准::复杂<;双倍>>;?_C++_Arrays_Matlab - Fatal编程技术网

C++ 从数组到TypedArray的无限制转换<;标准::复杂<;双倍>>;?

C++ 从数组到TypedArray的无限制转换<;标准::复杂<;双倍>>;?,c++,arrays,matlab,C++,Arrays,Matlab,尝试了许多方法,但在编写mex函数时无法使其工作 我有一个来自MATLAB的输入,我将它作为const MATLAB::data::Array传递给一个方法。这个数组可能包含复杂的数据,有时它只是实数据。因此,在我天真的想法中,最直接的方法应该是,我可以简单地将数组转换为TypedArray,如果数组包含复数,我会得到完整的复数值,如果数组只包含实数,我会得到imag=0的复数值。这似乎是不可能的。。。最后的转换在任何情况下都不被接受,MATLAB甚至在尝试将单个元素从实值数组转换为std::c

尝试了许多方法,但在编写mex函数时无法使其工作

我有一个来自MATLAB的输入,我将它作为
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