ublas: обернуть ublas::vector как ublas::matrix_expression

Я очень новичок в 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.

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

Спасибо.


person niboshi    schedule 10.02.2012    source источник


Ответы (2)


Ну, есть возможность создать адаптер только для чтения непрерывной области памяти в матрицу только для чтения. Взгляните на пример 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;

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

person Anonymous    schedule 20.04.2012
comment
make_matrix_from_pointer() выполняет копирование из исходной памяти. Кроме того, просто уточняю, чтобы избежать путаницы: это не часть библиотеки boost. - person NoahR; 22.02.2013

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

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

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

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

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

person panda-34    schedule 22.06.2012