Main Content

matlab::data::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,
    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::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에 따라 데이터형이 결정됩니다.

InputLayout inputLayout

입력 데이터의 레이아웃입니다. InputLayout의 값은 COLUMN_MAJOR 또는 ROW_MAJOR입니다.

const T* const begin

const T* const end

C 스타일 포인터로 지정된 사용자 제공 데이터의 시작과 끝입니다. 이 구문은 모든 프리미티브 데이터형, 복소수형, string형을 지원합니다.

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>를 만듭니다. 이 메서드는 연산방식 유형, 복소수형, string형을 지원합니다.

파라미터

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)
설명

지정된 data를 사용하여 CellArray를 만듭니다. 데이터는 열 우선 순서로 저장됩니다.

템플릿 파라미터

...Targs

다음에 대한 가변 인자(variadic) 템플릿:

  • 연산방식 유형

  • 복소수형

  • matlab::data::String

  • std::string

  • matlab::data::Array

파라미터

ArrayDimensions dims

셀형 배열의 차원입니다.

Targs... data

셀형 배열에 삽입할 요소로, 프리미티브 데이터형, 복소수형, string형 또는 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)
설명

정의된 클래스인 className 유형의 EnumArray를 만듭니다. 지정된 경우 이 메서드는 열거형 이름의 목록을 사용하여 배열을 초기화합니다.

파라미터

ArrayDimensions dims

배열의 차원입니다.

std::string className

열거형 배열의 클래스 이름입니다.

std::vector<std::string> enums

열거형 이름의 목록입니다.

발생되는 예외

matlab::OutOfMemoryException

배열을 할당할 수 없습니다.

matlab::data::MustSpecifyClassNameException

클래스 이름이 지정되지 않았습니다.

matlab::data::WrongNumberOfEnumsSuppliedException

제공된 열거형의 개수가 올바르지 않습니다.

matlab::data::NumberOfElementsExceedsMaximumException

요소의 개수가 size_t보다 큽니다.

예제

이 클래스에 정의된 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차원만 있을 수 있습니다. 이 메서드는 버퍼를 복사하지 않으며 배열이 메모리의 소유권을 가집니다.

템플릿 파라미터

T

요소 유형으로, double, bool 또는 std::complex<double>로 지정됩니다.

파라미터

ArrayDimensions dims

배열의 차원입니다.

size_t nnz

0이 아닌 요소의 개수입니다.

buffer_ptr_t<T> data

0이 아닌 요소를 포함하는 버퍼입니다.

buffer_ptr_t<size_t> rows

각 요소의 행 값을 포함하는 버퍼입니다.

buffer_ptr_t<size_t> cols

각 요소의 열 값을 포함하는 버퍼입니다.

발생되는 예외

matlab::OutOfMemoryException

배열을 할당할 수 없습니다.

matlab::data::InvalidDimensionsInSparseArrayException

3개 이상의 차원이 지정되었습니다.

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입니다.

createArrayFromBuffer로 생성되는 배열에 matlab::data::TypedIterator<T>를 사용하면 MemoryLayout이 반환되는 요소의 순서에 영향을 미칩니다.

이 파라미터는 선택 사항입니다.

발생되는 예외

matlab::OutOfMemoryException

배열을 할당할 수 없습니다.

matlab::data::InvalidArrayTypeException

버퍼 유형이 유효하지 않습니다.

matlab::data::InvalidMemoryLayoutException

유효하지 않은 메모리 레이아웃입니다.

matlab::data::InvalidDimensionsInRowMajorArrayException

차원이 유효하지 않습니다. 이 예외는 행 우선 배열이 2차원이 아닌 경우 MATLAB® R2019a와 R2019b에서 생성되는 배열에서 발생합니다.

matlab::data::NumberOfElementsExceedsMaximumException

요소의 개수가 size_t보다 큽니다.

버전 내역

R2017b에 개발됨