作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据 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&)’
我正在#include
ing:
#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_expression
的sum
,作为shark library做了。
关于c++ - 如何对 ublas 矩阵中的所有元素求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398059/
我是一名优秀的程序员,十分优秀!