Как скопировать boost :: numeric :: ublas :: vector в матрицу? - PullRequest
1 голос
/ 24 февраля 2012

Что я здесь не так делаю?

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

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

Не сработало ли это?

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

это займет первые v.size() элементы m со значением v.

Следующий код компилируется и запускается на моемсистема (буст 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 голос
/ 22 июня 2012

Конечно, вы пытаетесь получить доступ к 1-й строке, которая просто отсутствует для матрицы 1 xv, size ().Вы должны написать:

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

хотя вам будет лучше с

row(m, 0) = v;
...