如何对ublas矩阵中的所有元素求和?

时间:2014-06-24 23:41:43

标签: c++ boost

根据this pagesum中应该提供ublas功能,但我无法进行以下编译:

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

错误是:

  

testcpp:146:144:错误:没有匹配的调用函数   “之和(升压::数字:: uBLAS库::矩阵&安培)”

#include

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

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

1 个答案:

答案 0 :(得分:2)

正如评论中所指出的,sum仅适用于向量(see documentation

你当然可以得到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';
}

更可重复使用的方法是定义summatrix_expressionshark library