Разреженные массивы MATLAB® обеспечивают эффективное устройство хранения данных двойных или логических данных, которые имеют большой процент нулей. Разреженные массивы MATLAB поддерживают арифметику, логическую, и операции индексации. Для получения дополнительной информации смотрите Разреженные матрицы.
Используйте matlab::data::ArrayFactory создать matlab::data::SparseArray массив. Запишите данные для разреженного массива в буферы и используйте эти буферы, чтобы создать разреженный массив. Передайте разреженный массив MATLAB с помощью MATLABEngine::setVariable.
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
void sparseArray() {
using namespace matlab::engine;
// Connect to named shared MATLAB session started as:
// matlab -r "matlab.engine.shareEngine('myMatlabEngine')"
String session(u"myMatlabEngine");
std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB(session);
// Define the data for the sparse array
std::vector<double> data = { 3.5, 12.98, 21.76 };
std::vector<size_t> rows = { 0,0,1 };
std::vector<size_t> cols = { 0, 4, 8 };
size_t nnz = 3;
// Create buffers for the data
matlab::data::ArrayFactory factory;
auto data_p = factory.createBuffer<double>(nnz);
auto rows_p = factory.createBuffer<size_t>(nnz);
auto cols_p = factory.createBuffer<size_t>(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<double> arr =
factory.createSparseArray<double>({ 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);
}whos MATLAB команда показывает, что массив, переданный рабочему пространству MATLAB, является разреженным массивом.
>> whos Name Size Bytes Class Attributes s 2x9 128 double sparse
Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.
matlab::data::ArrayFactory | matlab::engine::MATLABEngine | matlab::engine::connectMATLAB