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
を作成します。データは列優先の順序です。
| 以下の可変個引数テンプレート。
|
| cell 配列の次元数。 |
| cell 配列に挿入される要素。プリミティブ型、複素数型、文字列、または |
| 配列を割り当てることができません。 |
| 入力は |
| 要素数が |
#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 は文字列の長さです。
| 配列に埋め込まれるデータ。 |
|
| 配列を割り当てることができません。 |
| 入力は |
#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; }
他の例については、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 つの次元のみが可能です。このメソッドではバッファーはコピーされず、配列がメモリのオーナーとなります。
| 要素の種類。 |
| 配列の次元数。 |
| 非ゼロ要素の数。 |
| 非ゼロ要素を含むバッファー。 |
| 各要素の行の値を含むバッファー。 |
| 各要素の列の値を含むバッファー。 |
| 配列を割り当てることができません。 |
| 2 より大きい次元が指定されています。 |
| 要素数が |
#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 で導入