matlab::data::ArrayFactory
배열을 만드는 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, InputLayout inputLayout)
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
는 데이터로 배열을 채웁니다. 데이터는 기본적으로 열 우선 순서로 복사됩니다. 데이터 레이아웃을 지정하려면 inputLayout
파라미터를 사용하십시오.
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::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 스타일 포인터로 지정된 사용자 제공 데이터의 시작과 끝입니다. 이 구문은 모든 프리미티브 데이터형, 복소수형, string형을 지원합니다. |
| 데이터가 포함된 이니셜라이저 목록입니다. |
| 배열을 할당할 수 없습니다. |
| 요소의 개수가 |
|
|
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>
를 만듭니다. 이 메서드는 연산방식 유형, 복소수형, string형을 지원합니다.
| 스칼라에 삽입할 값입니다.
|
| |
| |
|
| 배열을 할당할 수 없습니다. |
| 입력값이 |
#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)
지정된 data
를 사용하여 CellArray
를 만듭니다. 데이터는 열 우선 순서로 저장됩니다.
| 다음에 대한 가변 인자(variadic) 템플릿:
|
| 셀형 배열의 차원입니다. |
| 셀형 배열에 삽입할 요소로, 프리미티브 데이터형, 복소수형, string형 또는 |
| 배열을 할당할 수 없습니다. |
| 입력값이 |
| 요소의 개수가 |
#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)
정의된 클래스인 className
유형의 EnumArray
를 만듭니다. 지정된 경우 이 메서드는 열거형 이름의 목록을 사용하여 배열을 초기화합니다.
| 배열의 차원입니다. |
| 열거형 배열의 클래스 이름입니다. |
| 열거형 이름의 목록입니다. |
| 배열을 할당할 수 없습니다. |
| 클래스 이름이 지정되지 않았습니다. |
| 제공된 열거형의 개수가 올바르지 않습니다. |
| 요소의 개수가 |
이 클래스에 정의된 TextColor.Blue
열거형 인수의 matlab::data::EnumArray
객체를 만듭니다.
classdef TextColor enumeration Red Green Blue end end
값을 인수 벡터로 이동합니다.
#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; }
다른 예제는 Pass Enumerations to MATLAB from C++ 항목을 참조하십시오.
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)
rows
×cols
차원을 갖는 SparseArray<T>
를 만듭니다. 희소 배열에는 2차원만 있을 수 있습니다. 이 메서드는 버퍼를 복사하지 않으며 배열이 메모리의 소유권을 가집니다.
| 요소 유형으로, |
| 배열의 차원입니다. |
| 0이 아닌 요소의 개수입니다. |
| 0이 아닌 요소를 포함하는 버퍼입니다. |
| 각 요소의 행 값을 포함하는 버퍼입니다. |
| 각 요소의 열 값을 포함하는 버퍼입니다. |
| 배열을 할당할 수 없습니다. |
| 3개 이상의 차원이 지정되었습니다. |
| 요소의 개수가 |
#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
메서드에 전달할 초기화되지 않은 버퍼를 만듭니다.
| 프리미티브 데이터형입니다. |
| 실제 버퍼 크기가 아니라 요소 개수입니다. |
| 버퍼를 포함하는 Unique_ptr입니다. |
| 배열을 할당할 수 없습니다. |
createArrayFromBuffer
template <typename T> TypedArray<T> createArrayFromBuffer(ArrayDimensions dims, buffer_ptr_t<T> buffer, MemoryLayout memoryLayout = MemoryLayout::COLUMN_MAJOR)
주어진 버퍼를 사용하여 TypedArray<T>
를 만듭니다.
| 프리미티브 데이터형입니다. |
| 배열의 차원입니다. |
| 데이터를 포함하는 버퍼입니다. 버퍼는 복사되지 않습니다. |
| 입력 버퍼와 생성되는 배열의 메모리 레이아웃으로,
이 파라미터는 선택 사항입니다. |
| 배열을 할당할 수 없습니다. |
| 버퍼 유형이 유효하지 않습니다. |
| 유효하지 않은 메모리 레이아웃입니다. |
| 차원이 유효하지 않습니다. 이 예외는 행 우선 배열이 2차원이 아닌 경우 MATLAB® R2019a와 R2019b에서 생성되는 배열에서 발생합니다. |
| 요소의 개수가 |
버전 내역
R2017b에 개발됨