exponenta event banner

matlab:: данные:: ArrayFactory

Класс C++ для создания массивов

Описание

Использовать ArrayFactory создать matlab::data::Array объекты.

Сведения о классе

Пространство имен:

matlab::data

Включить:

ArrayFactory.hpp

Конструкторы

Конструктор по умолчанию

ArrayFactory()

Броски

matlab::data::FailedToLoadLibMatlabDataArrayException

Бетонная реализация не загружена.

Деструктор

~ArrayFactory()

Функции-члены

createArray

template <typename T>
TypedArray<T> createArray(ArrayDimensions dims)
template <typename ItType, typename T>
TypedArray<T> createArray(ArrayDimensions dims, 
    ItType begin, 
    ItType end)
template <typename T>
TypedArray<T> createArray(ArrayDimensions dims, 
    const T* const begin, 
    const T* const end)
template <typename T> 
TypedArray<T> createArray(ArrayDimensions dims, 
    std::initializer_list<T> data)
Описание

Создает TypedArray<T> с заданными размерами. Если указано, createArray заполняет массив данными. Данные копируются и должны быть в основном порядке столбцов.

Параметры шаблона
  • ItType - типы итераторов, указанные как std::iterator.

  • T - типы элементов, указанные как один из следующих типов данных C++.

    bool

    int8_t

    int16_t

    int32_t

    int64_t

    uint8_t

    uint16_t

    uint32_t

    uint64_t

    float

    double

    char16_t

    matlab::data::Stringstd::complex<double>std::complex<float>std::complex<int8_t>std::complex<uint8_t>std::complex<int16_t>
    std::complex<uint16_t>std::complex<int32_t>std::complex<uint32_t>std::complex<int64_t>std::complex<uint64_t>matlab::data::MATLABString

    Создание массива matlab::data::Object типы элементов, используйте TypedArray<T> createArray(ArrayDimensions dims, ItType begin, ItType end) синтаксис.

Параметры

ArrayDimensions dims

Размеры массива.

ItType begin

ItType end

Начало и конец предоставленных пользователем данных. value_type итератор определяет тип данных.

const T* const begin

const T* const end

Начало и конец предоставленных пользователем данных, указанных как указатель в стиле C. Этот синтаксис поддерживает все примитивные типы, сложные типы и строковые типы.

std::initializer_list<T>

Список инициализаторов, содержащий данные.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::NumberOfElementsExceedsMaximumException

Количество элементов больше size_t.

matlab::data::InvalidArrayTypeException

Тип ввода matlab::data::ObjectArray не соответствует типу TypedArray<T>.

createScalar

template <typename T>
TypedArray<T> createScalar(const T val)
TypedArray<String> createScalar(const String val)
TypedArray<String> createScalar(const std::string val)
ObjectArray createScalar(const Object& val);
Описание

Создание скаляра TypedArray<T> с заданным значением. Этот метод поддерживает арифметические типы, комплексные типы и строковые типы.

Параметры

const T val

Значение, вставляемое в скаляр.

Для std::string параметры, если val представляет собой 7-битные данные ASCII, затем метод преобразует их в UTF16.

const String val

const std::string val

const Object& val

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::NonAsciiCharInInputDataException

Вход: std::string и содержит символы, отличные от ASCII.

Примеры
#include "MatlabDataArray.hpp"

int main() {
    matlab::data::ArrayFactory factory;

    // Create a vector containing two scalar values    
    std::vector<matlab::data::Array> args({
	factory.createScalar<int16_t>(100),
	factory.createScalar<int16_t>(60)});
    return 0;
}

createCellArray

CellArray createCellArray(ArrayDimensions dims)
template <typename ...Targs>
CellArray createCellArray(ArrayDimensions dims, Targs... data)
Описание

Создает CellArray с указанным data. Данные находятся в основном порядке столбцов.

Параметры шаблона

...Targs

Вариадный шаблон:

  • арифметический тип

  • сложный тип

  • matlab::data::String

  • std::string

  • matlab::data::Array

Параметры

ArrayDimensions dims

Размеры массива ячеек.

Targs... data

Элементы для вставки в массив ячеек, указанные как примитивный комплексный тип, строка или Array.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::NonAsciiCharInInputDataException

Вход: std::string и содержит символы, отличные от ASCII.

matlab::data::NumberOfElementsExceedsMaximumException

Количество элементов больше size_t.

Примеры
#include "MatlabDataArray.hpp"

int main()
{
	using namespace matlab::data;
	ArrayFactory f;
	CellArray myArray = f.createCellArray({ 1,2 },
		f.createCharArray("MATLAB Cell Array"),
		f.createArray<double>({ 2,2 }, { 1.2, 2.2, 3.2, 4.2 });

	return 0;
}

createCharArray

CharArray createCharArray(String str)
CharArray createCharArray(std::string str)
Описание

Создание 1xn CharArray из указанного ввода, где n - длина строки.

Параметры

matlab::data::String str

Данные для заполнения массива.

std::string str

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::NonAsciiCharInInputDataException

Вход: std::string и содержит символы, отличные от ASCII.

Примеры
#include "MatlabDataArray.hpp"

int main() {
    using namespace matlab::data;
    ArrayFactory factory;
    CharArray A = factory.createCharArray("This is a char array");
    return 0;
}

createStructArray

StructArray createStructArray(ArrayDimensions dims, 
    std::vector<std::string> fieldNames)
Описание

Создает StructArray с заданными размерами и именами полей.

Параметры

ArrayDimensions dims

Размеры массива.

std::vector<std::string> fieldNames

Вектор имен полей для структуры.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::DuplicateFieldNameInStructArrayException

Указаны повторяющиеся имена полей.

matlab::data::NumberOfElementsExceedsMaximumException

Количество элементов больше size_t.

Примеры
#include "MatlabDataArray.hpp"

int main() {
    using namespace matlab::data;
    ArrayFactory f;

    // Create StructArray equivalent to MATLAB structure s:
    // s = struct('loc', {'east', 'west'}, 'data', {[1, 2, 3], [4., 5., 6., 7., 8.]})
    StructArray S = f.createStructArray({ 1,2 }, { "loc", "data" });
    S[0]["loc"] = f.createCharArray("east");
    S[0]["data"] = f.createArray<uint8_t>({ 1, 3 }, { 1, 2, 3 });
    S[1]["loc"] = f.createCharArray("west");
    S[1]["data"] = f.createArray<double>({ 1, 5 }, { 4., 5., 6., 7., 8. });

    // Access the value defined by the MATLAB statement:
    // s(1).data
    Reference<Array> val = S[0]["data"];
	
    return 0;
}

createEnumArray

EnumArray createEnumArray(ArrayDimensions dims, 
    std::string className, 
    std::vector<std::string> enums)
EnumArray createEnumArray(ArrayDimensions dims, 
    std::string className)
Описание

Создает EnumArray типа className, который является определенным классом. Если указано, метод инициализирует массив со списком имен перечисления.

Параметры

ArrayDimensions dims

Размеры массива.

std::string className

Имя класса массива перечисления.

std::vector<std::string> enums

Список имен перечисления.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::MustSpecifyClassNameException

Имя класса не указано.

matlab::data::WrongNumberOfEnumsSuppliedException

Указано неправильное число перечислений.

matlab::data::NumberOfElementsExceedsMaximumException

Количество элементов больше size_t.

Примеры
#include "MatlabDataArray.hpp"
#include <vector>

int main()
{
	using namespace matlab::data;
	ArrayFactory f;
	auto blue = f.createEnumArray({ 1,1 }, "TextColor", { "Blue" });

	// Create an argument vector
	std::vector<Array> args({ f.createCharArray("My text"), std::move(blue) });

	return 0;
}

createSparseArray

template <typename T>
SparseArray<T> createSparseArray(ArrayDimensions dims, 
    size_t nnz,
    buffer_ptr_t<T> data, 
    buffer_ptr_t<size_t> rows, 
    buffer_ptr_t<size_t> cols)
Описание

Создает SparseArray<T> с rowsоколо-cols размеры. Для разреженных массивов можно использовать только два измерения. Метод не копирует буфер, и массив становится владельцем памяти.

Параметры шаблона

T

Типы элементов, указанные как double, bool, или std::complex<double>.

Параметры

ArrayDimensions dims

Размеры массива.

size_t nnz

Число ненулевых элементов.

buffer_ptr_t<T> data

Буфер, содержащий ненулевые элементы.

buffer_ptr_t<size_t> rows

Буфер, содержащий значение строки для каждого элемента.

buffer_ptr_t<size_t> cols

Буфер, содержащий значение столбца для каждого элемента.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::InvalidDimensionsInSparseArrayException

Указано более двух размеров.

matlab::data::NumberOfElementsExceedsMaximumException

Количество элементов больше size_t.

Примеры
#include "MatlabDataArray.hpp"

int main() {
	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;

	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);

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

	matlab::data::SparseArray<double> arr =
		factory.createSparseArray<double>({ 2,9 }, nnz, std::move(data_p),
			std::move(rows_p), std::move(cols_p));
	return 0;
}

createEmptyArray

Array createEmptyArray()
Описания

Создание пустого Array не содержит элементов.

Прибыль

Array

Пустой массив.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

createBuffer

template <typename T>
buffer_ptr_t<T> createBuffer(size_t numberOfElements)
Описание

Создает неинициализированный буфер для передачи в createArrayFromBuffer способ.

Параметры шаблона

T

Примитивные типы.

Параметры

size_t numberOfElements

Количество элементов, а не фактический размер буфера.

Прибыль

buffer_ptr_t<T>

Unique_ptr, содержащий буфер.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

createArrayFromBuffer

template <typename T>
TypedArray<T> createArrayFromBuffer(ArrayDimensions dims, 
    buffer_ptr_t<T> buffer,
    MemoryLayout memoryLayout = MemoryLayout::COLUMN_MAJOR)
Описание

Создает TypedArray<T> с использованием данного буфера.

Параметры шаблона

T

Примитивные типы.

Параметры

ArrayDimensions dims

Размеры массива.

buffer_ptr_t<T> buffer

Буфер, содержащий данные. Буфер не копируется. TypedArray<T> объект становится владельцем буфера.

MemoryLayout memoryLayout

Компоновка памяти для входного буфера, указанная как MemoryLayout::COLUMN_MAJOR или как MemoryLayout::ROW_MAJOR. Формат по умолчанию: COLUMN_MAJOR. Этот параметр является необязательным.

Броски

matlab::OutOfMemoryException

Не удалось выделить массив.

matlab::data::InvalidArrayTypeException

Недопустимый тип буфера.

matlab::data::InvalidMemoryLayoutException

Недопустимый макет памяти.

matlab::data::InvalidDimensionsInRowMajorArrayException

Недопустимые измерения. Это исключение возникает для массивов, созданных с помощью MATLAB ® R2019a и R2019b, если основной массив строк не 2-D.

matlab::data::NumberOfElementsExceedsMaximumException

Количество элементов больше size_t.

Представлен в R2017b