問題タブ [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.
c++ - オペレーターのオーバーロード Boost ublas Vector
C++ でブースト ベクターの "/" 演算子をオーバーロードする方法はありますか?
Overloaded 'operator/' must be a binary operator (has 1 parameter) のようなエラーが表示されます
c++ - C で非ジェネリック テンプレート パラメーターを削除する
マトリックスコードに ublas を使用していますが、交換可能にしたいので、これを行っていました:
今日、このマトリックスのいくつかを制限付きのサイズに変更する必要があるため、これも用意します。
問題は、私の古い関数宣言:
動作しなくなりました。それは私に与えます:
宣言を次のように変更することで、なんとか修正できました。
問題は、私の定義が cpp ファイルであるため、cpp で次のようにする必要があることです。
dummyFunc を実行したり、他の方法で関数を一般化したりするのを避ける方法はありますか?
c++ - スカラー行列のような通常の Boost 行列を初期化できるのはなぜですか?
なぜこれが機能するのですか?それはどこのドキュメントにもありません...
出力:
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) )
役に立ちません。
まだ何が欠けているのでしょうか?前もって感謝します。
c++ - doubleが負の値にオーバーフローする可能性はありますか?
こんにちは私はg++コンパイラを使用していて、(私が思うに)doublesのアンダーフローを経験しています。これは可能ですか?もしそうなら、動作はどのように定義されますか
共分散行列(51x51)のcsv形式をここにアップロードしました:http://pastebin.com/r0fx1qsx
これは、行列式を計算するために使用しているコードです(c ++ではブーストが必要です)(その後、long doubleに切り替えて、効果がありませんでした):
データに対して与えられた結果はです-3.59916e-183
。
次のmatlab
コードを実行すると:
ご覧のとおり、1つは(わずかに)ポジティブですが、もう1つは(わずかに)ネガティブです
c++ - Boost :: uBlas :: vectorの要素のサブセットに対して操作を実行する方法は?
長いブースト::numeric:: ublas :: vectorがあり、要素のサブセットに対して更新操作を実行するとします。更新する必要のある要素の数は、「すべて」または「なし」の間のどこかにあります。更新する要素は、更新する必要のある要素ごとに「1」を含むスパースcompressed_vectorによって指定されます。
この問題を解決するには、次の2つの方法が考えられます。
右側にマスクを掛けるだけです。
これに伴う問題は、それが非常に非効率に見えることです。ublasはベクトル全体を計算してから、この場合(つまり、update_mask == 0の場合)すべての未使用の値を破棄しませんか?
ただよりも遅くなると思います
更新する必要のある要素が少ない場合、これはひどく非効率的です。
すべての値をループして更新します
これに伴う問題は、a)見た目がひどい、b)そもそもベクトルを使用する目的をやや損なう、c。)多くのインデックスを更新する場合、および/または操作がより複雑になる場合、ひどく非効率になるはずであるということです。 。
これを効率的に行う方法について何かアイデアはありますか?これはかなり一般的な問題であると確信していますが、それについて役立つものは何も見つかりませんでした(そして、ublasのドキュメントは...面白くありません)。
c++ - ublas::vector のように使用するために、boost::property_map を適応させる方法は?
Boost Graph LibraryをBoost uBLASと組み合わせて使用するスマートな方法を探しています。より正確には、グラフ隣接行列と各頂点の他の頂点プロパティを含むベクトルとの間のスカラー積の結果を使用して、各頂点の特定の頂点プロパティを更新する必要があります。問題を説明するために(残念ながら長い)最小限の例を挙げましょう。
さて、私の提案は可能な解決策ですが、私はそれに満足していません. 問題は、(a)スカラー積を計算するためにold_potential
、プロパティ マップ全体を関連付けられたマップにコピーすることです。(b)新しく計算された値をグラフに戻すには、プロパティ マップもublas::vector
トラバースする必要があります。私のアプリケーションではこれらの操作が何度も繰り返されると思われるため、最初からこの部分をできるだけクリーンに実行したいと考えています。new_potential
理想的には、このすべてのコピーを行ったり来たりして、代わりにある種のアダプターを使用して、 の呼び出しでboost::property_map
として動作するようにしたいと考えています。次のようなものを使用すると素晴らしいでしょう。ublas::vector
prod()
そのような機能を実現する方法や、私のソリューションを改善する方法を誰かが知っていれば、とても感謝しています。
c++ - uBLASマトリックスクリアメモリー
次のような uBLAS マトリックスがあります。
行列に対する一連の計算が完了したら、そのメモリを解放します。
docsmat.clear()
によると、「マトリックスをクリアする」ものを使用しています。しかし、私のプログラムはメモリ不足を続けています。
ヘッダーを掘り下げると、次のことがわかります。
したがって、 には明確なセマンティクスの問題がありclear()
ます。
問題は、メモリが確実に解放されるようにするにはどうすればよいかということです。
c++ - C++ のブースト ベクトルのサブクラス
boost::numeric::ublas::c_vector<float, 3>
3 つの要素が .x .y または .z でアクセスでき、フォームのコンストラクタを持つ aのサブクラスを作成するにはどうすればよいですかvec3(float x, float y, float z);
。ブースト ベクトルを使用したかったのは、クラスのすべての演算子と数学関数の機能を自分で作成する必要がなく、すでにブースト ライブラリを使用していたからです。
例えば: