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++ 데이터형 중 하나로 지정됩니다.boolint8_tint16_tint32_tint64_tuint8_tuint16_tuint32_tuint64_tfloatdoublechar16_tmatlab::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::MATLABStringmatlab::data::Object요소 유형으로 구성된 배열을 만들려면TypedArray<T> createArray(ArrayDimensions dims, ItType begin, ItType end)구문을 사용하십시오.
| 배열의 차원입니다. |
| 사용자 제공 데이터의 시작과 끝입니다. 이터레이터의 |
| 입력 데이터의 레이아웃입니다. |
| C 스타일 포인터로 지정된 사용자 제공 데이터의 시작과 끝입니다. 이 구문은 모든 프리미티브 데이터형, 복소수형, string형을 지원합니다. |
| 데이터가 포함된 이니셜라이저 목록입니다. |
| 배열을 할당할 수 없습니다. |
| 요소의 개수가 |
|
|
createScalar
template <typename T> TypedArray<T> createScalar(const T val)
TypedArray<MATLABString> createScalar(const String val)
TypedArray<MATLABString> 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형 또는 |
|
| 배열을 할당할 수 없습니다. |
| 입력값이 |
| 요소의 개수가 |
std::string과 double형을 포함하는 2개 요소 셀형 배열을 만듭니다.
#include "MatlabDataArray.hpp"
int main()
{
using namespace matlab::data;
ArrayFactory f;
CellArray myArray = f.createCellArray({ 1,2 },
std::string("MATLAB Cell Array"), 5.5);
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;
}createCharArrayFromUTF8
CharArray createCharArray(const std::string& str)
지정된 UTF8 문자 std::string에서 1xn CharArray를 생성합니다. 여기서 n은 문자열 길이입니다.
| 배열에 채울 데이터입니다. |
| 배열을 할당할 수 없습니다. |
| 입력 문자열에 UTF8 이외의 문자가 들어 있습니다. |
| 코드가 R2024b보다 이전 버전을 실행 중입니다. |
#include "MatlabDataArray.hpp"
int main() {
using namespace matlab::data;
ArrayFactory factory;
// "UTF8 string"
std::string utf8str = "\x55\x54\x46\x20\x73\x74\x72\x69\x6e\x67";
CharArray A = factory.createCharArrayFromUTF8(utf8str);
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>를 만듭니다. buffer_deleter_t 유형의 사용자 지정 삭제자 함수를 지정하여 버퍼를 관리할 수 있습니다. (R2024b 이후)
|
| 프리미티브 데이터형입니다. |
|
| 배열의 차원입니다. |
|
| 데이터를 포함하는 버퍼입니다. 버퍼는 복사되지 않습니다. |
| 입력 버퍼와 생성되는 배열의 메모리 레이아웃으로,
이 파라미터는 선택 사항입니다. |
| 배열을 할당할 수 없습니다. |
| 버퍼 유형이 유효하지 않습니다. |
| 유효하지 않은 메모리 레이아웃입니다. |
| 차원이 유효하지 않습니다. 이 예외는 행 우선 배열이 2차원이 아닌 경우 MATLAB® R2019a와 R2019b에서 생성되는 배열에서 발생합니다. |
| 요소의 개수가 |