boost::ublas は、要素ごとの操作と一連の操作をうまくサポートしていないことがわかりました (ただし、効率はかなり高いです :)) 私はしようとしています
D = A^2 .* B^3 .* C
ここで、A、B、C はすべて同じサイズの正方行列です。演算子 ".*" は要素ごとの演算を表し、^ は行列の累乗です。boost:ublas で、私は書きました
for (int n=0; n<300; n++)
{
for (int k=0; k<300; k++)
{
D(n, k) = pow(abs(A(n, k)), 2)*pow(abs(B(n, k)), 3)*C(n, k);
}
}
私のプログラムには、上記のような一連の操作がたくさんありますが、ループの代わりに 1 行のコードを使用しても同じ結果を得ることができますか?
また、次のように行列またはベクトルのすべての要素に定数を割り当てることは有効ではないように思われます
boost::numeric::ublas::vector v(100); v = 0.2;
代わりに、ループを使用して割り当てを再度行う必要があります。コードを節約するためのより良い方法はありますか? 私のアルゴリズムは非常に長く、上記のような退屈な操作が非常に多くあります。私は別の数値ライブラリ Armadillo を試しました。これは演算を単純化するための良い方法を提供しますが、現在は疎行列を想定していません (私のコードを実行するのに約 10 回かかります)。