一个MATLAB®单元格数组是一种容器,其中每个单元格可以包含任意类型的数组。MATLAB c++引擎使您能够使用matlab::数据::ArrayFactory:: createCellArray
成员函数。要创建空单元格数组,请使用createArray <数组matlab::数据::>
.
您可以在MATLAB之间传递单元格数组。在MATLAB中,这些数组是类的细胞
.
的matlab:: data:: CellArray
类实现为数组的数组,定义如下:
matlab::数据::TypedArray <数组matlab::数据::>
有关如何设置和构建c++引擎程序的信息,请参见构建c++引擎程序.
这个示例代码创建了一个单元格数组,并将其放入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_ptrmatlabPtr = 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
使用[]
索引以访问单元格数组的元素。例如,访问上一节中创建的单元格数组的第一个元素,并将该元素转换为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_ptrmatlabPtr = 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获取单元格数组。这段代码假设有一个单元格数组变量名为cellArray2
,就像在前面的例子中创建的那样。要将单元格数组传递给MATLAB,请参见修改单元格数组的元素.
要获取单元格数组,请遵循以下步骤:
使用matlab:引擎::MATLABEngine
getVariable成员函数将单元格数组导入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_ptrmatlabPtr = 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;+ +我; } }
matlab:引擎::connectMATLAB
|matlab:: data:: ArrayFactory
|matlab:引擎::MATLABEngine
|matlab:: data:: TypedArray