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