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::ObjectArrayTypedArray<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

以下の可変個引数テンプレート。

  • 算術型

  • 複素数型

  • matlab::data::String

  • std::string

  • matlab::data::Array

パラメーター

ArrayDimensions dims

cell 配列の次元数。

Targs... data

cell 配列に挿入される要素。プリミティブ型、複素数型、文字列、または 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)
説明

指定された入力から 1 行 n 列の 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;
}

他の例については、C++ から MATLAB への列挙の引き渡しを参照してください。

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 x cols の次元数をもつ SparseArray<T> を作成します。スパース配列では 2 つの次元のみが可能です。このメソッドではバッファーはコピーされず、配列がメモリのオーナーとなります。

テンプレート パラメーター

T

要素の種類。doublebool、または std::complex<double> として指定します。

パラメーター

ArrayDimensions dims

配列の次元数。

size_t nnz

非ゼロ要素の数。

buffer_ptr_t<T> data

非ゼロ要素を含むバッファー。

buffer_ptr_t<size_t> rows

各要素の行の値を含むバッファー。

buffer_ptr_t<size_t> cols

各要素の列の値を含むバッファー。

スロー

matlab::OutOfMemoryException

配列を割り当てることができません。

matlab::data::InvalidDimensionsInSparseArrayException

2 より大きい次元が指定されています。

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 で導入