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(), InputLayout::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;
}