c++ - 使用 boost c++ ublas 矩阵和 vector 类型进行元素运算

标签 c++ boost vector matrix linear-algebra

我想对 boost 矩阵和 vector 类型执行逐元素函数,例如对每个元素取对数,对每个元素取幂,应用特殊函数,例如gamma和digamma等(类似于matlab对应用于矩阵和 vector 的这些函数的处理。)

我想编写一个辅助函数,为每个所需的函数强制执行此操作就足够了,但这似乎很浪费。

同样,boost wiki 提供了一些代码到 vectorize standard functions , 但这看起来相当复杂。

建议使用 valarray,但我想避免在数据类型之间进行转换,因为我需要 ublas 数据类型用于其他操作(矩阵乘积、稀疏矩阵等)

非常感谢任何帮助。

最佳答案

使用 begin1()/end1() 将不起作用,因为它提供对默认列位置 (0) 中元素的访问:因此,您只需访问第一列中的所有元素。最好(在您获得预期行为的意义上)通过以下方式获得顺序访问:

std::transform(mat.data().begin(), mat.data().end(),
               mat.data().begin(), boost::math::tgamma) ;

我怀疑这可能是实现不完全的情况。

尽情享受吧!

关于c++ - 使用 boost c++ ublas 矩阵和 vector 类型进行元素运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/773667/

相关文章:

c++ - 动态分配 vector (或 vector 的 vector )

C++ 我们可以创建类函数的覆盖吗?

c++ - 减去包含重复元素的 vector

c++ - 我怎样才能得到一个vector::value_type的sizeof?

c++ - 包含类函数的 vector

c++ - 带私有(private)构造函数的 vector <class>

c++ - 合并排序链表

c++ - boost 正则表达式 : Undefined references when linking

c++ - boost 几何交集给出奇怪的结果

c++ - Boost.Spirit 编译器无法识别 std::pair