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