gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:53 27 4
gpt4 key购买 nike

根据 this page ublas 中应该有一个 sum 函数,但我无法编译以下内容:

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

错误是:

testcpp:146:144: error: no matching function for call to ‘sum(boost::numeric::ublas::matrix&)’

我正在#includeing:

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

我是否遗漏了一个包含,或者我是否误解了文档?我将如何实现这一点(我试图对矩阵的所有元素求和并生成单个 double)?

最佳答案

正如评论中指出的,sum 仅适用于 vector ( see documentation )

您当然可以获取 m.data() 并以此方式对值求和,但您使用的是线性代数库!将 1 的行 vector 乘以你的矩阵,然后对结果求和:

#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';
}

一种更可重用的方法是定义一个采用matrix_expressionsum,作为shark library做了。

关于c++ - 如何对 ublas 矩阵中的所有元素求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398059/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com