2

boost::numeric::ublas 行列にレベル 1 blas を適用するにはどうすればよいですか? たとえば、最大エントリまたはすべてのエントリの合計を計算したいとします。行列で norm_1 または norm_inf を使用しても、コンパイラ エラーは発生しませんが、(私のように) 任意の結果が返されます。ブースト1.42を使用しています

4

2 に答える 2

3

norm_infon 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 に答える