2009-04-21 116 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) ; 

我懷疑這可能是其實現是不夠全面的情況。

享受!