C++ MATLAB データ API を使用した配列の作成
配列の作成
C++ MATLAB® データ API を使用すると、MATLAB の外部で実行されるアプリケーションが、MATLAB に依存しないインターフェイス経由で MATLAB データを使用して作業できます。API は最新の C++ セマンティクスと設計パターンを使用し、MATLAB コピーオンライト セマンティクスを使ってできるだけデータのコピーを避けるようにします。
MATLAB データ API のヘッダー ファイルは MatlabDataArray.hpp
です。
matlab::data::Array
クラスは、すべての配列型の基底クラスです。型やサイズなどの一般的な配列情報を提供します。Array
クラスは、1 次元配列と多次元配列の両方をサポートします。MATLAB データ API では、0 ベースのインデックスを使用します。
配列を作成するには、まず matlab::data::ArrayFactory
を使用して factory を作成します。
matlab::data::ArrayFactory factory;
factory を使用して、double
型の 2 行 2 列の配列を作成します。MATLAB ステートメント A = [1 2; 3 4]
の順序と一致するように、配列値を列優先の形式で指定します。配列を検査するには、matlab::data::Array
クラスで関数を使用します。
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; Array A = factory.createArray<double>({ 2,2 }, { 1.0, 3.0, 2.0, 4.0 }); // Inspect array ArrayType c = A.getType(); ArrayDimensions d = A.getDimensions(); size_t n = A.getNumberOfElements(); return 0; }
このコードは、次の MATLAB ステートメントと等価です。
A = [1 2; 3 4]; c = class(A); d = size(A); n = numel(A);
matlab::data::TypedArray
クラスは反復子をサポートします。これにより、範囲ベースの for
ループを使用できます。この例では、3 行 2 列の TypedArray
から 1 行 6 列の配列を作成します。
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; // Create a 3-by-2 TypedArray TypedArray<double> A = factory.createArray( {3,2}, {1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }); // Assign values of A to the double array C double C[6]; int i = 0; for (auto e : A) { C[i++] = e; } return 0; }
行優先のデータからの列優先の配列の作成
行優先の順序のデータから作成された std::vector
がある場合、そのデータから MATLAB の列優先の TypedArray
を作成できます。
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; const std::vector<double> data{1, 2, 3, 4, 5, 6}; // Create a 2-by-3 TypedArray in column-major order TypedArray<double> A = factory.createArray( {2,3}, data.begin(), data.end(), ROW_MAJOR); // Assign values of A to the double array C double C[6]; int i = 0; for (auto e : A) { C[i++] = e; } return 0; }
配列の各要素の演算
要素への参照を使用して、matlab::data::Array
内の各要素を変更します。この例では、matlab::data::TypedArray
内の各要素をスカラー値で乗算します。
#include "MatlabDataArray.hpp" int main() { using namespace matlab::data; ArrayFactory factory; // Create a 3-by-2 TypedArray TypedArray<double> A = factory.createArray( {3,2}, {1.1, 2.2, 3.3, 4.4, 5.5, 6.6 }); // Define scalar multiplier double multiplier(10.2); // Multiple each element in A for (auto& elem : A) { elem *= multiplier; } return 0; }