boost::numeric::ublas 行列にレベル 1 blas を適用するにはどうすればよいですか? たとえば、最大エントリまたはすべてのエントリの合計を計算したいとします。行列で norm_1 または norm_inf を使用しても、コンパイラ エラーは発生しませんが、(私のように) 任意の結果が返されます。ブースト1.42を使用しています
2 に答える
3
norm_inf
on a matrixは、基礎となるベクトル空間の無限ノルムによって誘導される行列ノルムを計算します。これはたまたま行列の最大絶対行合計です。
hannesの例を見ると、行列の最後の行 (i=99、j=0...99) には次が含まれます。
9900, 9901, 9902, ... , 9999
これらのエントリを合計すると、 が得られます。994950
これはまさにnorm_inf
生成されるものです。
于 2011-08-28T19:06:03.133 に答える
1
最小限の例は次のようになります。
#include<iostream>
#include<boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;
int main(){
int l = 100;
matrix<double> m(l,l);
for (int i = 0; i < l; ++i) {
for (int j = 0; j < l; ++j) {
m(i,j)=i*l+j;
}
}
std::cout << norm_inf(m)<<std::endl;
return 0;
}
99 になるはずですが、結果は 994950 になります。
これは、少なくとも特定のタスクを解決するワンライナーです。
float infnorm = accumulate(m.data().begin(),m.data().end(),0,std::max<double>);
于 2011-08-26T10:27:45.230 に答える