Класс C++ для создания массивов
Использовать ArrayFactory создать matlab::data::Array объекты.
|
Пространство имен: | matlab::data |
|
Включить: | ArrayFactory.hpp |
ArrayFactory()
|
Бетонная реализация не загружена. |
~ArrayFactory()
createArraytemplate <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 |
Создание массива matlab::data::Object типы элементов, используйте TypedArray<T> createArray(ArrayDimensions dims, ItType begin, ItType end) синтаксис.
| Размеры массива. |
| Начало и конец предоставленных пользователем данных. |
| Начало и конец предоставленных пользователем данных, указанных как указатель в стиле C. Этот синтаксис поддерживает все примитивные типы, сложные типы и строковые типы. |
| Список инициализаторов, содержащий данные. |
| Не удалось выделить массив. |
| Количество элементов больше |
| Тип ввода |
createScalartemplate <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> с заданным значением. Этот метод поддерживает арифметические типы, комплексные типы и строковые типы.
| Значение, вставляемое в скаляр. Для |
| |
| |
|
| Не удалось выделить массив. |
| Вход: |
#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;
}createCellArrayCellArray createCellArray(ArrayDimensions dims)
template <typename ...Targs> CellArray createCellArray(ArrayDimensions dims, Targs... data)
Создает CellArray с указанным data. Данные находятся в основном порядке столбцов.
|
|
Вариадный шаблон:
|
|
|
Размеры массива ячеек. |
|
|
Элементы для вставки в массив ячеек, указанные как примитивный комплексный тип, строка или |
|
|
Не удалось выделить массив. |
|
Вход: |
| Количество элементов больше |
#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;
}
createCharArrayCharArray 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;
}createStructArrayStructArray 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;
}createEnumArrayEnumArray 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;
}
createSparseArraytemplate <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;
}createEmptyArrayArray createEmptyArray()
Создание пустого Array не содержит элементов.
|
|
Пустой массив. |
|
|
Не удалось выделить массив. |
createBuffertemplate <typename T> buffer_ptr_t<T> createBuffer(size_t numberOfElements)
Создает неинициализированный буфер для передачи в createArrayFromBuffer способ.
|
|
Примитивные типы. |
|
|
Количество элементов, а не фактический размер буфера. |
|
|
Unique_ptr, содержащий буфер. |
|
|
Не удалось выделить массив. |
createArrayFromBuffertemplate <typename T>
TypedArray<T> createArrayFromBuffer(ArrayDimensions dims,
buffer_ptr_t<T> buffer,
MemoryLayout memoryLayout = MemoryLayout::COLUMN_MAJOR)Создает TypedArray<T> с использованием данного буфера.
|
|
Примитивные типы. |
|
|
Размеры массива. |
|
| Буфер, содержащий данные. Буфер не копируется. |
| Компоновка памяти для входного буфера, указанная как |
| Не удалось выделить массив. |
| Недопустимый тип буфера. |
| Недопустимый макет памяти. |
| Недопустимые измерения. Это исключение возникает для массивов, созданных с помощью MATLAB ® R2019a и R2019b, если основной массив строк не 2-D. |
| Количество элементов больше |