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::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<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 を作成します。データは列優先の順序です。
|
| 以下の可変個引数テンプレート。
|
|
| cell 配列の次元数。 |
|
| cell 配列に挿入される要素。プリミティブ型、複素数型、文字列、または |
|
| 配列を割り当てることができません。 |
| 入力は |
| 要素数が |
std::string と double を含む 2 要素の cell 配列を作成します。
#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)
指定された入力から 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;
}createCharArrayFromUTF8
CharArray createCharArray(const std::string& str)
指定された UTF8 文字の std::string から 1 行 n 列の CharArray を作成します。ここで n は string の長さです。
| 配列に埋め込まれるデータ。 |
| 配列を割り当てることができません。 |
| 入力 string に非 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;
}
他の例については、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> を作成します。buffer_deleter_t 型のカスタム削除関数を指定して、バッファーを管理できます。 (R2024b 以降)
|
| プリミティブ型 |
|
| 配列の次元数。 |
|
| データを含むバッファー。バッファーはコピーされません。 |
| 入力バッファーおよび作成された配列用のメモリ レイアウト。
このパラメーターはオプションです。 |
| 配列を割り当てることができません。 |
| バッファー タイプが無効です。 |
| メモリ レイアウトが無効です。 |
| 次元数が無効です。この例外は、行優先の配列が 2 次元でない場合、MATLAB® R2019a および R2019b で作成した配列で発生します。 |
| 要素数が |