c++ - Boost.uBLAS 中的矩阵表达式和 vector 表达式类是什么?

标签 c++ ublas boost-ublas

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

谢谢。

最佳答案

它是一种遏制某种行为的机制。

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 的具体设计 - 然而,逻辑始终是这个。

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

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

关于c++ - Boost.uBLAS 中的矩阵表达式和 vector 表达式类是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16287151/

相关文章:

c++ - 四叉树不会插入节点或拆分

c++ - 使用maven2构建基于autotools的C/C++包

c++ - 为什么箭头运算符 "->"不能在 boost::numeric::ublas::vector<...>::iterator 上工作?

c++ - 为什么我可以像标量矩阵一样初始化常规的 Boost 矩阵?

c++ - 谷歌浏览器插件

c++ - 快板编译错误: undefined reference to "PathFindOnPathA@8"

c++ - ublas 矩阵表达式教程/示例

c++ - 如何在 C++ boost ublas 中将文件流式传输到矩阵中?

c++ - 当我向 <vector> 添加对象时出现段错误

c++ - 如何调整 boost::property_map 以便像 ublas::vector 一样使用它?