我想对 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/