ublas: Обернуть ublas:: вектор как 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,

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

Благодарю.

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;

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

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

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

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

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

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

Другие вопросы по тегам