2

各エントリにいくつかの選択肢 (異なる座標) がある、ある種の距離行列 (2D) を保存したいと考えています。たとえば、x_alt=3 で x=1、y_alt=1 で y=3 の距離にアクセスし、配列 [1][3][3][1] の 4 次元マルチ配列を調べます。

注意すべき重要な点は次のとおりです。最も内側の 2 つの配列/ベクトルは、外側のものの異なる値に対して同じサイズではありません。

値を計算する最初の初期化ステップの後、これ以上変更する必要はありません!

これは、stl-vectors を使用して簡単に実現できます。

vector<vector<vector<vector<double> > > >`extended_distance_matrix;

ここで、外側の 2 次元を動的に反復し、必要なだけ内側の 2 次元の代替を埋めることができます (たとえば、push_back() を使用)。

質問:

  • Boost.MultiArray でこの種のデータ構造定義は可能ですか? どのように?
  • ネストされたベクトルの代わりに Boost.MultiArray を使用することは良い考えですか? パフォーマンス (特にルックアップ! (メモリ レイアウト))? 使いやすい?

ご意見ありがとうございます。

サーシャ

PS: ブーストのドキュメントは役に立ちませんでした。multi_array_ref を使用して、すでにサイズが設定されている配列を 4D 構造全体に入れることができるでしょうか?

編集: 現時点では、別のアプローチを考えています: 代替案を平坦化 -> 代替案間のすべての距離を含む 1 つの大きなマトリックス。次に、ノードごとの代替の数を計算し、プレフィックスの合計 (行列の位置/シフトを記述) を構築するだけで、2 段階の方法で情報にアクセスできます。

しかし、私の質問はまだ未解決です。

4

2 に答える 2

2

必要なようです:

multi_array<ublas::matrix<type>,2>
于 2010-10-29T16:08:44.647 に答える