Boost.uBLAS中的矩阵表达式和向量表达式是什么?

时间:2013-04-29 19:57:33

标签: c++ ublas boost-ublas

我试过阅读Boost Documentation,但我不明白这个表达概念。 Matrix类继承了一个matrix_expression类,我不明白这个类用于什么。

谢谢。

1 个答案:

答案 0 :(得分:2)

这是一种包含某种行为的机制。

matrix_container - 正如单词所说 - 是一个容器。

matrix_expression是一个表达式(就像添加两个矩阵一样)。 它基于RCTI习语,有助于图书馆的设计。 例如,假设您要将赋值写入类对象(成员函数)。假设一个比ublas更简单的上下文,你只有一个矩阵类型,你想写:

template <typename _E>
void assign( _E const & e );

问题在于,您可以将套接字或std :: string分配给矩阵。通常,人们试图避免这种情况; - )

所以,更好的方法是写:

template <typename _E>
void assign( matrix_expression<_E> const & e ) ;

现在您只能指定矩阵表达式。 我强调这只是逻辑而不是ublas特定的设计 - 然而,逻辑总是这一个。

现在假设您想编写自己的运算符* =有两个矩阵,或者用矩阵和表达式或两个表达式编写,也许对于* = matrix你想要使用lapack。 matrix_expressionmatrix_container之间的区别可以帮助您编写此操作的专用版本。

PS:我强调,这是潜在的逻辑/动机而不是实际发生的事情。如果你深入研究了ublas的胆量,你将会看到更多如何使用相同的逻辑。