Класс C++, чтобы создать массивы
Используйте ArrayFactory
создать matlab::data::Array
объекты.
Пространство имен: | matlab::data |
Включение: | ArrayFactory.hpp |
ArrayFactory()
|
Конкретная реализация, не загруженная. |
~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++.
|
|
|
|
|
|
|
|
|
|
|
|
matlab::data::String | std::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 |
|
Размерности для массива. |
|
Начало и конец пользователя снабдило данными. |
|
Начало и конец пользователя снабдило данными, заданными как указатель C-стиля. Этот синтаксис поддерживает все типы примитивов, составные типы и строковые типы. |
|
Список инициализаторов, содержащий данные. |
| Не мог выделить массив. |
| Число элементов больше |
createScalar
template <typename T> TypedArray<T> createScalar(const T val)
TypedArray<String> createScalar(const String val)
TypedArray<String> createScalar(const std::string val)
Создает скалярный TypedArray<T>
с данным значением. Этот метод поддерживает арифметические типы, составные типы и строковые типы.
|
Значение, которое будет вставлено в скаляр. Если |
| |
|
|
Не мог выделить массив. |
|
Входом является |
#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
. Данные находятся в порядке развертывания по столбцам.
|
Шаблон Variadic:
|
|
Размерности массива ячеек. |
|
Элементы, которые будут вставлены в массив ячеек в виде примитивного составного типа, строки или |
|
Не мог выделить массив. |
|
Входом является |
| Число элементов больше |
#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 является длиной строки.
|
Данные, чтобы быть заполненным в массив. |
|
|
Не мог выделить массив. |
|
Входом является |
#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
с данными размерностями и именами полей.
|
Размерности для массива. |
|
Вектор имен полей для структуры. |
|
Не мог выделить массив. |
|
Заданы дублирующиеся имена полей. |
| Число элементов больше |
#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
, который является заданным классом. Если задано, метод инициализирует массив списком имен перечисления.
|
Размерности для массива. |
|
Имя класса массива перечисления. |
|
Список имен перечисления. |
|
Не мог выделить массив. |
|
Имя класса, не заданное. |
|
Неправильное количество перечислений обеспечивается. |
| Число элементов больше |
#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
размерности. У вас может только быть две размерности для разреженных массивов. Метод не копирует буфер, и массив берет владение памяти.
|
Элемент вводит в виде |
|
Размерности для массива. |
|
Количество ненулевых элементов. |
|
Буфер, содержащий ненулевые элементы. |
|
Буфер, содержащий значение строки для каждого элемента. |
|
Буфер, содержащий значение столбца для каждого элемента. |
|
Не мог выделить массив. |
|
Заданы больше чем две размерности. |
| Число элементов больше |
#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
не содержа элементов.
|
Пустой массив. |
|
Не мог выделить массив. |
createBuffer
template <typename T> buffer_ptr_t<T> createBuffer(size_t numberOfElements)
Создает неинициализированный буфер, чтобы передать createArrayFromBuffer
метод.
|
Типы примитивов. |
|
Число элементов, не фактический buffer size. |
|
Unique_ptr, содержащий буфер. |
|
Не мог выделить массив. |
createArrayFromBuffer
template <typename T> TypedArray<T> createArrayFromBuffer(ArrayDimensions dims, buffer_ptr_t<T> buffer, MemoryLayout memoryLayout = MemoryLayout::COLUMN_MAJOR)
Создает TypedArray<T>
использование данного буфера.
|
Типы примитивов. |
|
Размерности для массива. |
| Буфер, содержащий данные. Буфер не копируется. |
| Размещение памяти для входного буфера в виде |
| Не мог выделить массив. |
| Буферный тип, не допустимый. |
| Недопустимое размещение памяти. |
| Размерности, не допустимые. Это исключение происходит для массивов, созданных с MATLAB® R2019a и R2019b, если упорядоченный по строкам массив не 2D. |
| Число элементов больше |