Создание массивов с C++ MATLAB Data API

Создание массивов

MATLAB® Data API C++ позволяет приложениям, запускающимся за пределами 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;
}

Смотрите также

|