主要内容

从c++中创建单元格数组

一个MATLAB®单元格数组是一种容器,其中每个单元格可以包含任意类型的数组。MATLAB c++引擎使您能够使用matlab::数据::ArrayFactory:: createCellArray成员函数。要创建空单元格数组,请使用createArray <数组matlab::数据::>

您可以在MATLAB之间传递单元格数组。在MATLAB中,这些数组是类的细胞

matlab:: data:: CellArray类实现为数组的数组,定义如下:

matlab::数据::TypedArray <数组matlab::数据::>

有关如何设置和构建c++引擎程序的信息,请参见构建c++引擎程序

将Cell Array放入MATLAB工作空间

这个示例代码创建了一个单元格数组,并将其放入MATLAB基本工作区中。

#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include "MatlabEngine.hpp"
void cellArrayPut(){使用命名空间matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//创建单元格数组matlab::data::CellArray cellArray1 = factory。createCellArray({1,2},工厂。createCharArray("MATLAB Cell Array"), factory。createArray <二> ({2,},{1.2,2.2,3.2,4.2}));//将单元格数组放入MATLAB工作区matlabPtr->setVariable(u"cellArray1", cellArray1);}

调用MATLAB函数显示了MATLAB工作空间中的变量。

> >谁的名字大小字节属性cellArray11 x2290细胞>> cellArray1{:} ans =MATLAB单元阵列的Ans = 1.2000 3.2000 2.2000 4.2000

访问Cell Array的元素

使用[]索引以访问单元格数组的元素。例如,访问上一节中创建的单元格数组的第一个元素,并将该元素转换为std:: string

matlab::data::CharArray cArray = cellArray1[0][0];std::string str = array . toascii ();

的变量str是单元格数组中值的副本。

修改单元格数组的元素

有不同的方法来修改单元格数组中的元素:

  • 创建对元素的引用并修改单元格数组中的值。

  • 复制元素,更改值,然后将值重新分配给单元格数组。

此示例代码使用matlab:: data:: TypedArrayRef创建对包含在特定单元格中的数组的引用。然后通过使用索引赋值更改数组中的特定元素来修改数组。

#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include "MatlabEngine.hpp"
void cellArrayMod(){//使用命名空间matlab::engine修改单元格数组的元素;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//创建一个2乘2的数组matlab::data::CellArray cellArray2 = factory。createArray < matlab::数据::数组> ({2,2});//给每个cell赋值cellArray2[0][0] = factory。createCharArray(“单元阵列”);cellArray2[0][1] =工厂。createArray <二> ({1,3},{2.2,3.2,-4.2});cellArray2[1][0] =工厂。createArray({ 1,3 }, { true, true, false }); cellArray2[1][1] = factory.createScalar(-3374); // Get reference to elements of the cell array // Modify the elements in the cell array matlab::data::TypedArrayRef elem1 = cellArray2[0][1]; elem1[1] = -3.2; matlab::data::TypedArrayRef elem2 = cellArray2[1][0]; elem2[1] = false; // Put cell array in MATLAB workspace matlabPtr->setVariable(u"cellArray2", std::move(cellArray2)); }

MATLAB工作空间中的单元格数组包括对数组元素引用所做的更改。这是MATLAB中的单元阵列。

>> cellArray2{:} ans =一个单元阵列的Ans = 1×3 logical数组1 00 ans = 2.2000 -3.2000 -4.2000

获取单元格数组MATLAB

这个示例代码从MATLAB获取单元格数组。这段代码假设有一个单元格数组变量名为cellArray2,就像在前面的例子中创建的那样。要将单元格数组传递给MATLAB,请参见修改单元格数组的元素

要获取单元格数组,请遵循以下步骤:

  • 使用matlab:引擎::MATLABEnginegetVariable成员函数将单元格数组导入c++。

  • 将返回的单元格数组定义为matlab:: data:: CellArray

  • 返回按索引的单元格的内容[1] [0]作为一个matlab::数据::TypedArray < bool >

  • 使用TypedArray: getNumberOfElements成员函数来循环遍历数组单元格的元素。

void cellArrayGet(){使用命名空间matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//从MATLAB中获取一个单元格数组MATLAB::data::CellArray ca = matlabPtr->getVariable(u"cellArray2");//将单元格的元素复制到vector matlab::data::TypedArray const elem2 = ca[1][0];std::向量< bool > logicalCell (elem2.getNumberOfElements ());Int I = 0;for (auto e: elem2) {logicalCell[i] = e;+ +我; } }

另请参阅

|||

相关的话题