MATLAB C++® API данных позволяет приложениям, запускающимся за пределами MATLAB, работают с данными MATLAB через нейтральный в отношении MATLAB интерфейс. API использует современную семантику C++ и шаблоны разработки и избегает копий данных, когда это возможно, при помощи семантики копирования при записи MATLAB.
Заголовочным файлом для MATLAB Data API является MatlabDataArray.hpp
.
matlab::data::Array
класс является базовым классом для всех типов массива. Это предоставляет общую информацию о массиве, такую как тип и размер. Array
класс поддерживает и одномерные и многомерные массивы. MATLAB Data API использует основанную на нуле индексацию.
Чтобы создать массив, сначала создайте фабрику с помощью matlab::data::ArrayFactory
.
matlab::data::ArrayFactory factory;
Используйте фабрику, чтобы создать массив 2 на 2 типа double
. Задайте значения массивов в упорядоченном по столбцам формате, чтобы совпадать с упорядоченным расположением выражения MATLAB A = [1 2; 3 4]
. Чтобы смотреть массив, используйте функции в matlab::data::Array
класс.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; Array A = factory.createArray<double>({ 2,2 }, { 1.0, 3.0, 2.0, 4.0 }); // Inspect array ArrayType c = A.getType(); ArrayDimensions d = A.getDimensions(); size_t n = A.getNumberOfElements(); return 0; }
Этот код эквивалентен следующим выражениям MATLAB.
A = [1 2; 3 4]; c = class(A); d = size(A); n = numel(A);
matlab::data::TypedArray
класс поддерживает итераторы, которые позволяют вам использовать основанный на области значений for
циклы. Этот пример создает 1 6 массив от 3 2 TypedArray
.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; // Create a 3-by-2 TypedArray TypedArray<double> A = factory.createArray( {3,2}, {1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }); // Assign values of A to the double array C double C[6]; int i = 0; for (auto e : A) { C[i++] = e; } return 0; }
Измените каждый элемент в matlab::data::Array
использование ссылки на элемент. Этот пример умножает каждый элемент в matlab::data::TypedArray
скалярным значением.
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; // Create a 3-by-2 TypedArray TypedArray<double> A = factory.createArray( {3,2}, {1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }); // Define scalar multiplier double multiplier(10.2); // Multiple each element in A for (auto& elem : A) { elem *= multiplier; } return 0; }