c++ - 从数组到TypedArray <std::complex <double >>的无限制转换?

标签 c++ arrays matlab

尝试了很多事情,编写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/

相关文章:

c++ - 我的 Word 加载项的对话框不使用视觉样式

c++ ->?= 运算符是什么意思?

php - 如何从 PHP 中的数组中删除重复值

javascript - 从单个数组中的多个值中查找单个值

performance - 如何构建减少迭代次数的循环

C++ 图形 initgraph 错误(语法或丢失文件缺陷?)

java 对象 - 公共(public)行为与静态行为

java - 如何使用Matlab处理声音信号,获取频率并在Java上使用它?

matlab fprintf 与基于值的格式规范

c++ - 为什么这两个构造函数在一起不会产生歧义错误?