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 回答