什么是矩阵表达式和向量表达式类在Boost.uBLAS



我试过阅读Boost文档,但我不理解这个表达式的概念。矩阵类继承了一个matrix_expression类,我不明白这个类是用来做什么的。

谢谢。

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

一个matrix_container是——顾名思义——一个容器。

A 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的特定设计——然而,逻辑总是这样的。

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

PS:我强调,这是潜在的逻辑/动机,而不是实际发生的事情。如果您曾经更深入地研究过ublas的内部结构,您将看到更多相同的逻辑是如何被使用的。

最新更新