主要内容

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

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

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

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

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

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

放入单元格数组MATLAB工作区

此示例代码创建一个单元格数组并将其放在Matlab Base工作区中。

#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include "MatlabEngine.hpp"
void cellArrayPut(){使用命名空间matlab::engine;//连接到名为shared matlab会话,开始为:// matlab -r“matlab.eengine.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 ::引擎修改单元格数组的元素;//连接到名为shared matlab会话,开始为:// matlab -r“matlab.eengine.shareengine('mymatlabengine')”字符串会话(U“mymatlabengine”);std::unique_ptr matlabPtr = connectMATLAB(session);//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//创建一个2×2数组matlab :: data :: cellarray cellarray2 = factory.createArray ({2,2});//为每个单元格Cellarray2 [0] [0] = factory.createCharArray(“单元阵列”)分配值;CellArray2 [0] [1] = factory.createArray ({1,3},{2.2,3.2,-4.2});CellArray2 [1] [0] = factory.createArray ({1,3},{true,true,false});Cellarray2 [1] [1] = factory.createscalar ( -  3374);//获取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逻辑大批1 00 ans = 2.2000 -3.2000 -4.2000

获取单元格数组MATLAB

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

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

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

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

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

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

void cellArrayGet(){使用命名空间matlab::engine;//连接到名为shared matlab会话,开始为:// matlab -r“matlab.eengine.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;+ +我;}}

另请参阅

|||

相关话题