2012-02-10 54 views
1

我是Boost :: uBLAS的一个非常小菜鸟。ublas:将ublas :: vector作为ublas :: matrix_expression包装

我有采取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

直到现在我还没有找到任何方法来做到这一点。
什么是最好的方法,最好是没有任何临时分配?

谢谢。

回答

0

那么,有一个选项可以创建一个连续内存区域的只读适配器到只读矩阵。看看example 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; 

可能你可以调整,以进一步适合您的需求/示例。

+1

'make_matrix_from_pointer()'确实从源内存执行拷贝。此外,只是澄清,以避免混淆:它不是助推库的一部分。 – NoahR 2013-02-21 23:54:49

0

,如果你已经准备好牺牲一些乘法可以避免分配,使用

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

转化载体导入矩阵表达。此外,您的功能可能应该是

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

matrix_expression本身不模型矩阵表达式的概念,它只是基类。

相关问题