問題タブ [boost-ublas]

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.

0 投票する
2 に答える
439 参照

c++ - オペレーターのオーバーロード Boost ublas Vector

C++ でブースト ベクターの "/" 演算子をオーバーロードする方法はありますか?

Overloaded 'operator/' must be a binary operator (has 1 parameter) のようなエラーが表示されます

0 投票する
2 に答える
330 参照

c++ - C で非ジェネリック テンプレート パラメーターを削除する

マトリックスコードに ublas を使用していますが、交換可能にしたいので、これを行っていました:

今日、このマトリックスのいくつかを制限付きのサイズに変更する必要があるため、これも用意します。

問題は、私の古い関数宣言:

動作しなくなりました。それは私に与えます:

宣言を次のように変更することで、なんとか修正できました。

問題は、私の定義が cpp ファイルであるため、cpp で次のようにする必要があることです。

dummyFunc を実行したり、他の方法で関数を一般化したりするのを避ける方法はありますか?

0 投票する
1 に答える
1851 参照

c++ - スカラー行列のような通常の Boost 行列を初期化できるのはなぜですか?

なぜこれが機能するのですか?それはどこのドキュメントにもありません...

出力:

0 投票する
0 に答える
445 参照

c++ - 多倍数の行列積のブースト

VS 2010 Express で Boost.Multiprecision と Boost.uBLAS を使用して、C++ で高精度の計算を実装しようとしています。ただし、最も単純なケースでも、コードのコンパイルに失敗し、次のエラーが発生します。

エラー C2677: バイナリ '+=' : タイプ 'boost::multiprecision::detail::expression' を取るグローバル演算子が見つかりません (または、受け入れ可能な変換がありません) c:\program files (x86)\boost_1_53_0\boost\numeric \ublas\functional.hpp 1176

コンパイラが不平を言う行は、ublas の Functional.hpp にあります。

number<cpp_dec_float<50> >高精度浮動小数点数の型として aを使用し、 2 つの行列 E と m をインスタンス化します - これは問題なく動作します。ただし、prod を使用してそれらを乗算しようとすると、コードはコンパイルに失敗します。ここで利用可能なMultiprecision FAQは、 pro のすべての引数を高精度型に明示的にキャストすることを提案していますが、prod(static_cast<matrix<number<cpp_dec_float<50> > > >(E),static_cast<matrix<number<cpp_dec_float<50> > > >(m) )役に立ちません。

まだ何が欠けているのでしょうか?前もって感謝します。

0 投票する
1 に答える
9414 参照

c++ - doubleが負の値にオーバーフローする可能性はありますか?

こんにちは私はg++コンパイラを使用していて、(私が思うに)doublesのアンダーフローを経験しています。これは可能ですか?もしそうなら、動作はどのように定義されますか

共分散行列(51x51)のcsv形式をここにアップロードしました:http://pastebin.com/r0fx1qsx

これは、行列式を計算するために使用しているコードです(c ++ではブーストが必要です)(その後、long doubleに切り替えて、効果がありませんでした):

データに対して与えられた結果はです-3.59916e-183

次のmatlabコードを実行すると:

ご覧のとおり、1つは(わずかに)ポジティブですが、もう1つは(わずかに)ネガティブです

0 投票する
0 に答える
218 参照

c++ - Boost :: uBlas :: vectorの要素のサブセットに対して操作を実行する方法は?

長いブースト::numeric:: ublas :: vectorがあり、要素のサブセットに対して更新操作を実行するとします。更新する必要のある要素の数は、「すべて」または「なし」の間のどこかにあります。更新する要素は、更新する必要のある要素ごとに「1」を含むスパースcompressed_vectorによって指定されます。

この問題を解決するには、次の2つの方法が考えられます。

  1. 右側にマスクを掛けるだけです。

    これに伴う問題は、それが非常に非効率に見えることです。ublasはベクトル全体を計算してから、この場合(つまり、update_mask == 0の場合)すべての未使用の値を破棄しませんか?

    ただよりも遅くなると思います

    更新する必要のある要素が少ない場合、これはひどく非効率的です。

  2. すべての値をループして更新します

    これに伴う問題は、a)見た目がひどい、b)そもそもベクトルを使用する目的をやや損なう、c。)多くのインデックスを更新する場合、および/または操作がより複雑になる場合、ひどく非効率になるはずであるということです。 。

これを効率的に行う方法について何かアイデアはありますか?これはかなり一般的な問題であると確信していますが、それについて役立つものは何も見つかりませんでした(そして、ublasのドキュメントは...面白くありません)。

0 投票する
1 に答える
714 参照

c++ - ublas::vector のように使用するために、boost::property_map を適応させる方法は?

Boost Graph LibraryをBoost uBLASと組み合わせて使用​​するスマートな方法を探しています。より正確には、グラフ隣接行列と各頂点の他の頂点プロパティを含むベクトルとの間のスカラー積の結果を使用して、各頂点の特定の頂点プロパティを更新する必要があります。問題を説明するために(残念ながら長い)最小限の例を挙げましょう。

さて、私の提案は可能な解決策ですが、私はそれに満足していません. 問題は、(a)スカラー積を計算するためにold_potential、プロパティ マップ全体を関連付けられたマップにコピーすることです。(b)新しく計算された値をグラフに戻すには、プロパティ マップもublas::vectorトラバースする必要があります。私のアプリケーションではこれらの操作が何度も繰り返されると思われるため、最初からこの部分をできるだけクリーンに実行したいと考えています。new_potential

理想的には、このすべてのコピーを行ったり来たりして、代わりにある種のアダプターを使用して、 の呼び出しでboost::property_mapとして動作するようにしたいと考えています。次のようなものを使用すると素晴らしいでしょう。ublas::vectorprod()

そのような機能を実現する方法や、私のソリューションを改善する方法を誰かが知っていれば、とても感謝しています。

0 投票する
1 に答える
909 参照

c++ - uBLASマトリックスクリアメモリー

次のような uBLAS マトリックスがあります。

行列に対する一連の計算が完了したら、そのメモリを解放します。

docsmat.clear()によると、「マトリックスをクリアする」ものを使用しています。しかし、私のプログラムはメモリ不足を続けています。

ヘッダーを掘り下げると、次のことがわかります。

したがって、 には明確なセマンティクスの問題がありclear()ます。

問題は、メモリが確実に解放されるようにするにはどうすればよいかということです。

0 投票する
1 に答える
113 参照

c++ - C++ のブースト ベクトルのサブクラス

boost::numeric::ublas::c_vector<float, 3>3 つの要素が .x .y または .z でアクセスでき、フォームのコンストラクタを持つ aのサブクラスを作成するにはどうすればよいですかvec3(float x, float y, float z);。ブースト ベクトルを使用したかったのは、クラスのすべての演算子と数学関数の機能を自分で作成する必要がなく、すでにブースト ライブラリを使用していたからです。

例えば: