ublas: Обернуть ublas :: vector как ublas :: matrix_expression - PullRequest
1 голос
/ 10 февраля 2012

Я очень новичок в Boost :: uBLAS.

У меня есть функция, которая принимает ublas::matrix_expression<double> в качестве ввода:

namespace ublas = boost::numeric::ublas;

void Func(const ublas::matrix_expression<double>& in,
                ublas::matrix_expression<double>& out);

Вызывающая сторона держит вектор строки как ublas::vector<double>, и я хочу, чтобы он был передан Func.

До сих пор я не нашел никакого способа сделать это.
Каков наилучший способ, желательно без какого-либо временного распределения?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 июня 2012

Вы можете избежать выделения, если готовы пожертвовать умножением, используйте

outer_prod(scalar_vector<double>(1, 1), vec)

для преобразования вектора в матричное выражение. Кроме того, ваша функция, вероятно, должна быть

template<class C>
void Func(const matrix_expression<C>& in...

сама matrix_expression не моделирует концепцию матричного выражения, это просто базовый класс.

0 голосов
/ 20 апреля 2012

Ну, есть возможность создать адаптер только для чтения из смежной области памяти в матрицу только для чтения . Взгляните на пример 3 . Это довольно просто использовать:

#include "storage_adaptors.hpp"
#include <boost/numeric/ublas/assignment.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

ublas::vector<double> v(6);
v <<= 1, 2, 3, 4, 5, 6;
ublas::matrix<double> m = ublas::make_matrix_from_pointer(2, 3, &v(0));
std::cout << m << std::endl;

Возможно, вы могли бы подстроить это под свои нужды / пример.

...