Создайте массивы с C++ MATLAB Data API

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

MATLAB на C++® Data API позволяет приложениям, работающим вне MATLAB, работать с данными MATLAB через нейтральный интерфейс MATLAB. API использует современную семантику C++ и шаблоны проекта и избегает копий данных по возможности с помощью семантики копирования при записи MATLAB.

Заголовочный файл для MATLAB Data API MatlabDataArray.hpp.

The matlab::data::Array класс является базовым классом для всех типов массивов. Он предоставляет общие сведения о массиве, такие как тип и размер. The 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);

The 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;
}

См. также

|