主要内容

将稀疏数组传递给MATLAB从C + +

MATLAB®稀疏数组提供了双精度或逻辑数据的高效存储,这些数据中有很大比例的零。MATLAB稀疏数组支持算术、逻辑和索引操金宝app作。有关更多信息,请参见稀疏矩阵

使用matlab:: data:: ArrayFactory创建一个matlab:: data:: SparseArray数组中。将稀疏数组的数据写入缓冲区,并使用这些缓冲区创建稀疏数组。将稀疏数组传递给MATLAB使用MATLABEngine: setVariable

#include "MatlabEngine.hpp" void sparseArray() {using namespace matlab::engine;//连接到命名的共享MATLAB会话启动为:// MATLAB -r " MATLAB .engine. shareengine ('myMatlabEngine')"字符串会话(u“myMatlabEngine”);std::unique_ptr matlabPtr = connectMATLAB(session);//定义稀疏数组std::vector data = {3.5, 12.98, 21.76};Std::vector rows = {0,0,1};Std::vector cols = {0,4,8};Size_t NNZ = 3;//为数据创建缓冲区matlab::data::ArrayFactory factory;buffer_ptr_t data_p = factory.createBuffer(nnz); buffer_ptr_t rows_p = factory.createBuffer(nnz); buffer_ptr_t cols_p = factory.createBuffer(nnz); // Write data into the buffers double* dataPtr = data_p.get(); size_t* rowsPtr = rows_p.get(); size_t* colsPtr = cols_p.get(); std::for_each(data.begin(), data.end(), [&](const double& e) { *(dataPtr++) = e; }); std::for_each(rows.begin(), rows.end(), [&](const size_t& e) { *(rowsPtr++) = e; }); std::for_each(cols.begin(), cols.end(), [&](const size_t& e) { *(colsPtr++) = e; }); // Use the buffers to create the sparse array matlab::data::SparseArray arr = factory.createSparseArray({ 2,9 }, nnz, std::move(data_p), std::move(rows_p), std::move(cols_p)); // Put the sparse array in the MATLAB workspace matlabPtr->setVariable(u"s", arr); }

MATLAB命令表示传递给MATLAB工作空间的数组是一个稀疏数组。

> >谁的名字大小字节属性年代2 x9128稀疏的

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

另请参阅

||