如何将boost::numeric::ublas::vector复制到矩阵

How to copy a boost::numeric::ublas::vector to a matrix?

本文关键字:复制 vector numeric boost ublas      更新时间:2023-10-16

我做错了什么?

// 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

然而,在main.cpp处,有没有更简洁的方法将v转化为m

这不起作用吗?

std::copy(v.begin(), v.end(), m.begin1());

这将占用具有v.值的CCD_ 5的第一个CCD_

以下代码在我的系统上编译并运行(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 x v,size()矩阵来说是不存在的。你应该写:

ublas::matrix_row<ublas::matrix<double> > r( m, 0 );

尽管你最好使用

row(m, 0) = v;