簡體   English   中英

是否有gsl_vector的count_if函數? C / C ++

[英]is there a count_if function for a gsl_vector? C/C++

我正在使用gnu科學圖書館(GSL)。 假設我有一個像這樣的gsl_vector :7 0 -6 5 8 0 10 -2

這是一個包含正數,負數和零作為元素的向量。

我想計算這個gsl_vector非零元素或零元素的gsl_vector 我知道有一個名為count_if的函數用於C ++向量。 但我搜索gsl_vector.hgsl_blas.h ,沒有相同的功能。 我可以通過gsl_vector_get()評估所有元素,然后問問題。

int counter = 0;

for(int i = 0;i<length_of_the_gsl_vector;++i){ 
  if(fabs(gsl_vector_get(y,i))<0.5) ++counter;
}

return counter;

但是我幾乎花了一天時間想知道GSL中是否已經存在這樣一種效率更高的功能。

或者gsl_array可能有一個count_if函數?

您可以使用gsl_vector_ptr獲取數據指針,然后在指針上使用std::count_if

struct Predicate{
    inline bool operator()(double x) const {
        return fabs(x) < 0.5 ;
    }
} ;

int res = std::count_if( 
    gsl_vector_ptr(y,0), gsl_vector_ptr(y,0) + size, 
    Predicate()
) ;

他們陳述的是GSL實現的std :: valarray的模型,我讀到這樣的語句作為授權我使用的東西,如:

gsl_block vec;
/* initialize ... */
std::valarray<double> a(vec.data, vec.size);
/* use std:: galore */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM