問題タブ [boost-multi-array]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost::multi_array のパフォーマンスに関する質問
次のテスト プログラムを使用して、boost::multi_array のパフォーマンスをネイティブの動的に割り当てられた配列と比較しようとしています。
次の結果が得られます。
multi_arrays がそれほど遅いとは信じられません。誰かが私が間違っていることを見つけることができますか?
メモリへの書き込みを行っているため、キャッシュは問題ではないと思います。
編集: これはデバッグ ビルドでした。Laserallanの提案に従って、リリースビルドを行いました:
はるかに近い。しかし、16 対 1 はまだ高いように思えます。
決定的な答えはありませんが、先に進み、実際のコードにはネイティブ配列をそのまま残します。
それが私のテストの最大の欠陥だったので、Laserallanの答えを受け入れます。
ありがとうございます。
c++ - boost::multi_index パラメータを使用した関数呼び出しによるインデックス
キーとしてパラメーターを持つメンバー関数を使用する boost::multi_index コンテナーを作成しようとしています。
これらのデータ項目の長方形のリストがあり、複数のインデックスが必要だとします。長方形は、リスト内のすべてのアイテムが get() を介して同じ属性を持つことを意味します
boost::multi_index 宣言は次のようなものです
ただし、BOOST_MULTI_INDEX_CONST_MEM_FUNCT()にはこれらの機能がありません。複合キーは引き続きメンバー変数で機能します。
どうすればこれを回避できますか? orderd_unique<> に boost::function1 を与えることができるようには見えません
編集:
少し考えた後、ここに私がやろうとしていることの要点があります。
boost::multi_index は、コンパイル時にインデックス機能を決定します。これらの機能を回避し、実行時に決定されるインデックスを使用するにはどうすればよいですか?
c++ - 同じテンプレート関数を参照して、boost ::multi_arrayとstd:: vectorの行を渡す方法は?
このコードに問題があります:
gccでコンパイルしようとすると、次のエラーが発生します。
関数の最初の引数の型をからに変更すると、boost :: multi_arrayで期待どおりに機能foo
しますが、std :: vectorは値で渡されますが、これは私が望むものではありません。2つのテンプレートを作成せずに、どうすれば目標を達成できますか?Vec&
Vec
c++ - boost::multi_array サイズ変更例外?
boost::multi_array コンストラクターまたはサイズ変更メソッドが bad_alloc 例外 (または、割り当てまたはサイズ変更が失敗したことを示す他の例外) をスローできるかどうかを調べようとしています。この情報はドキュメントのどこにも見つかりません。
明確化(コメントから追加):
これは、割り当てが失敗した場合に、メモリの消費量が少ない (低速な) メソッドにフォールバックできる科学的アルゴリズムです。基本的に、クエリ内の遺伝子のすべてのペアと、多数のデータセットのそれぞれの相互検証セット内のすべての遺伝子との間の「距離」(相関) を保持するために、2 つの動的に割り当てられた 3 次元配列があります。より遅い方法では、必要に応じてその場で各距離を再計算します。これは、両方のメソッドを実装し、メモリ不足の例外にフォールバックする既存の Java 実装の C++ バージョン用です。私は実際にメモリが不足するとは思っていません。
c++ - Boost.MultiArray 初心者: 動的な内部配列サイズで 4D 配列を取得する方法は?
各エントリにいくつかの選択肢 (異なる座標) がある、ある種の距離行列 (2D) を保存したいと考えています。たとえば、x_alt=3 で x=1、y_alt=1 で y=3 の距離にアクセスし、配列 [1][3][3][1] の 4 次元マルチ配列を調べます。
注意すべき重要な点は次のとおりです。最も内側の 2 つの配列/ベクトルは、外側のものの異なる値に対して同じサイズではありません。
値を計算する最初の初期化ステップの後、これ以上変更する必要はありません!
これは、stl-vectors を使用して簡単に実現できます。
ここで、外側の 2 次元を動的に反復し、必要なだけ内側の 2 次元の代替を埋めることができます (たとえば、push_back() を使用)。
質問:
- Boost.MultiArray でこの種のデータ構造定義は可能ですか? どのように?
- ネストされたベクトルの代わりに Boost.MultiArray を使用することは良い考えですか? パフォーマンス (特にルックアップ! (メモリ レイアウト))? 使いやすい?
ご意見ありがとうございます。
サーシャ
PS: ブーストのドキュメントは役に立ちませんでした。multi_array_ref を使用して、すでにサイズが設定されている配列を 4D 構造全体に入れることができるでしょうか?
編集: 現時点では、別のアプローチを考えています: 代替案を平坦化 -> 代替案間のすべての距離を含む 1 つの大きなマトリックス。次に、ノードごとの代替の数を計算し、プレフィックスの合計 (行列の位置/シフトを記述) を構築するだけで、2 段階の方法で情報にアクセスできます。
しかし、私の質問はまだ未解決です。
c++ - boost::multi_array ビューとサブアレイの違いは何ですか
ドキュメントを見た後、私はこれを理解できません。
のようなコードを書くことができます
data_2d_subarray_t
次に、タイプまたはを使用して 2D スライスにアクセスできますdata_2d_view_t
。
それらの違いは何ですか?
もう一方ではできないことで何ができますか?
性能差はありますか?
これを私に明確にしてくれてありがとう。よろしく、ロドリゴブ。
c++ - インデックスtypedefの不完全な型によるboost::multi_index_containerコンパイルエラー
boost :: multi_index_container(次のように)を使用していますが、インデックスをtypedefしようとすると、コンパイルエラーが発生します:
エラーの詳細:
typename
使用のバリエーションを試しtemplate
ましたが、私はそれを正しく行っていないと思います(問題を正しく理解していないため、正しく解決することができます)。
どんな助けでも大歓迎です。
ありがとう。
PS:「g ++(GCC)4.2.4(Ubuntu 4.2.4-1ubuntu4)」と「boost-1.42」を使用しています。
c++ - boost::multi_arrayをトラバースする方法
私は、単一のforループでmulti_array全体をトラバースできるイテレーターを探して、boost::multi_arrayライブラリーを調べてきました。
そのライブラリにはそのようなイテレータはないと思います。(そこで見つかったイテレータを使用すると、multi_arrayの単一の次元をトラバースできます)
私が間違っている?
そうでない場合、そのようなイテレータを定義するライブラリはありますか?
詳細を入力して、私は次のようなものを書きたいと思います:
3x4x2回繰り返すループを取得します
c++ - boostmulti_arrayを使用した構造体のインスタンス化
抽象クラスを拡張する構造体があり、その中にブーストmulti_arrayを変数として追加すると、次のエラーが発生します。
mrs
エラー:次の仮想関数は純粋であるため、変数''を抽象型として宣言できませんzi::concurrency::runnable