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; buffer_ptr_t<double> data_p = factory.createBuffer<double>(nnz); buffer_ptr_t<size_t> rows_p = factory.createBuffer<size_t>(nnz); buffer_ptr_t<size_t> 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); }
MATLAB whos
команда показывает, что массив, переданный в рабочее пространство MATLAB, является разреженным массивом.
>> whos Name Size Bytes Class Attributes s 2x9 128 double sparse
Для получения информации о том, как настроить и создать программы C++ engine, смотрите Сборка программ C++ Engine.
matlab::data::ArrayFactory
| matlab::engine::connectMATLAB
| matlab::engine::MATLABEngine