根据this page,sum
中应该提供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
)?
答案 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';
}
更可重复使用的方法是定义sum
,matrix_expression
,shark library。