如何对一个公共矩阵中的所有元素求和

How do I sum all elements in a ublas matrix?

本文关键字:求和 元素 一个      更新时间:2023-10-16

根据这一页应该有一个sum函数提供在ublas,但我不能得到以下编译:

boost::numeric::ublas::matrix<double> mymatrix;
std::cout << boost::numeric::ublas::sum(mymatrix);

错误是:

testcpp:146:144:错误:没有匹配的函数调用的总和(boost::数字::ublas:: matrix&)"

I'm #include ing:

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>

我错过了一个包含,还是我误解了文档?我将如何实现这一点(我试图总结矩阵的所有元素,并产生一个单一的double)?

正如在注释中指出的,sum仅适用于矢量(参见文档)

你当然可以得到m.data()并以这种方式对值求和,但你正在使用线性代数库!用矩阵乘以一个1的行向量,并对结果求和:

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
namespace bls = boost::numeric::ublas;
int main()
{
    bls::matrix<double> m(3, 3);
    for (unsigned i = 0; i < m.size1(); ++i)
        for (unsigned j = 0; j < m.size2(); ++j)
            m(i, j) = 3 * i + j;
   std::cout << "Sum of all elements of " << m << " is "
             << sum(prod(bls::scalar_vector<double>(m.size1()), m)) << 'n';
}

一个更可重用的方法是定义一个sum,它接受一个matrix_expression,就像shark库所做的那样。