質問

ドキュメントを見た後、私はこれを理解することはできません。

次のようなコードを書くことができます

typedef boost::multi_array<boost::int32_t, 3> data_t;

// 3d --
typedef data_t::array_view<3>::type data_3d_view_t;

// 2d --
typedef data_3d_view_t::reference data_2d_subarray_t;
typedef data_t::array_view<2>::type data_2d_view_t;

その後、タイプ経由で2Dスライスにアクセスできます data_2d_subarray_t また data_2d_view_t.

それらの違いは何ですか?
他の人とはできないもので何ができますか?
パフォーマンスの違いはありますか?

これを私に明確にしてくれてありがとう。よろしく、ロドリゴブ。

役に立ちましたか?

解決

のテーブルから マルチビュー関連タイプ:

参照これは、含まれる値の参照タイプです。 numdims == 1の場合、これは要素です。それ以外の場合、これはテンプレートサブアレイ::タイプと同じタイプです。

Template array_view ::タイプこれは、DIMSディメンションを持つビュータイプです。呼び出しオペレーターによって返されます。マルチアレイをモデル化します。

したがって、それらは異なるタイプです。これに関連して、ビューはマルチアレイの一種のサブコレクションを表しています。彼らはマルチアレイの概念を実装しますが、それらに含まれる要素は実際には他のマルチアレイの要素です。ビューを使用すると、新しいものを定義できます 索引 マルチアレイの要素に。たとえば、インデックスを逆にするビューを定義して、ビューの最初の要素がマルチアレイの最後の要素であるように定義できます。から ドキュメンテーション:

ビューを使用すると、マルチアレイの基礎となる要素のサブセットを、まるで別のマルチアレイであるかのように扱うことができます。ビューは同じ基礎となる要素を指しているため、ビューの要素に加えられた変更は、元のマルチアレイに反映されます。

マルチアレイは再帰的に定義されています。次元のマルチアレイ n > 1は、次元のマルチアレイの配列と考えることができます n-1、サブアレイです。サブアレイとビューの重要な違いは、マルチアレイを主要軸を含むあらゆる軸に沿ってより低い寸法のビューにスライスできることですが、サブアレイは主軸に沿ってスライスできないということです。

data_t d3(boost::extents[4][5][6]);
data_2d_view_t d2_view = d3[boost::indices[range(0,4,2)][1][range(0,6,3)]];
data_2d_subarray_t d2_sub = d3[1];
// the following, and anything like it, won't work 
data_2d_subarray_t d2_sub_b = d3[range(0,4,2)][0];

大きなパフォーマンスの違いはあるとは思いませんが、これはビューを作成するときに使用するインデックスのタイプに依存します。ビューはパフォーマンスがわずかに少ないかもしれませんが、Bigoの意味ではそうではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top