【问题标题】:Set matrix field to Matlab struct将矩阵字段设置为 Matlab 结构
【发布时间】:2015-01-06 16:30:00
【问题描述】:

我正在将 Matlab 代码与集成 engine.h 的 C++ 代码连接。

我创建了一个包含多个标量和矩阵字段的结构。我首先使用命令行语法创建标量字段,我编写了辅助方法

void matlabSetStruct(Engine * ep, const std::string structure, 
                                            const std::string field, T value)
{
    ostringstream ss;
    ss << value;
    std::string setStruct = structure + "." + field + " = " + ss.str() + ";";
    matlabExecute(ep, setStruct);
}

现在,我想将矩阵字段添加到同一个结构中。我可以成功创建名称为MyStruct.Field 的新矩阵变量,但它们不被识别为现有结构MyStruct 的字段,而是被识别为新变量。我正在使用

int ret = engPutVariable(ep, array_name.c_str(), array);

如果我whos,我会得到

  MyStruct                        1x1                 7176  struct              
  MyStruct.CT_F1                  1x1795             14360  double              
  MyStruct.CT_F2                  1x1795             14360  double    

--> 矩阵字段是自变量

我找到了mxSetField,但是这是用于将字段添加到使用mxCreateStructMatrix 创建的结构中,并且此方法用于在 C 中创建与结构矩阵等效的 Matlab,这不是我想要实现的。

【问题讨论】:

    标签: c++ matlab struct integration mex


    【解决方案1】:

    一种选择是创建一个临时变量,然后将其值分配给结构的一个字段:

    // Create temp variable
    mxArray* array = convertVectorToMxArray(mat, nb_rows, nb_cols);  
    const std::string temp_name = array_name + "_temp";
    int ret = engPutVariable(ep, temp_name.c_str(), array);
    
    // Set variable to struct field
    const std::string cmd = std::string(array_name + " = " + temp_name + "; ");
    matlabExecute(ep, cmd);
    
    // Delete array
    mxDestroyArray(array);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 2011-02-18
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多