Main Content

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;
}

参考

|