我在这里做错了什么?
// file main.cpp
#include <iostream>
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
namespace ublas = boost::numeric::ublas;
int main()
{
ublas::vector<double> const v( 10 );
ublas::matrix<double> m( 1, v.size() );
ublas::matrix_row<ublas::matrix<double> > r( m, 1 );
r = v;
return 0;
}
此操作失败并显示消息:
Check failed in file /usr/local/include/boost/numeric/ublas/functional.hpp at line 1370:
i < size_i
terminate called after throwing an instance of 'boost::numeric::ublas::bad_index'
what(): bad index
Aborted
但是,v
m
main.cpp
还有更简洁的方法吗?
答案 0 :(得分:3)
这不起作用吗?
std::copy(v.begin(), v.end(), m.begin1());
这将占用v.size()
的第一个m
元素,其值为v。
以下代码在我的系统上编译并运行(boost 1.48和g ++ 4.62)
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <algorithm>
int main()
{
boost::numeric::ublas::vector<int> v(10);
boost::numeric::ublas::matrix<int> m(10,10); //using v.size() also works
std::copy(v.begin(), v.end(), m.begin1());
return 0;
}
答案 1 :(得分:1)
当然,您正在尝试访问第1行,而第1行则不适用于1 x v,size()矩阵。你应该写:
ublas::matrix_row<ublas::matrix<double> > r( m, 0 );
虽然你会更好
row(m, 0) = v;