将Boost UBLAS blas-1应用于矩阵

时间:2011-08-26 09:57:45

标签: c++ boost blas ublas

如何在boost :: numeric :: ublas矩阵上应用1级blas? 例如,我想计算所有条目的最大条目或总和。 在矩阵上使用norm_1或norm_inf不会产生编译器错误,但会返回(在我看来)任意结果。 我正在使用boost 1.42

2 个答案:

答案 0 :(得分:3)

矩阵上的

norm_inf通过基础向量空间上的无穷大范数计算矩阵范数induced。这恰好是矩阵的最大绝对行和。

如果你看一下 hannes 的例子,矩阵的最后一行(i = 99,j = 0 ... 99)包含:

9900, 9901, 9902, ... , 9999

如果您对这些条目求和,则会得到994950,这正是norm_inf生成的内容。

答案 1 :(得分: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>);