2009-04-21 117 views
7

我想在boost矩阵和向量类型上执行元素明智的函数,例如,取每个元素的对数,对每个元素取幂,应用特殊函数,如gamma和digamma等(类似于matlab对这些函数应用于矩阵和向量的处理)。元素明智的操作与boost C++ ublas矩阵和向量类型

我想写一个助手函数,为每个需要的功能强制执行此操作就足够了,但这看起来很浪费。

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

的valarray已经提出,但我想避免数据类型之间的转换,如我需要

任何帮助感激用于其它操作的uBLAS数据类型(矩阵产品,稀疏矩阵等) 。

回答

9

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

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

我怀疑这可能是其实现是不够全面的情况。

享受!