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

时间:2012-11-27 10:31:56

标签: c++ arrays vector gsl countif

我正在使用gnu科学图书馆(GSL)。 说我有gsl_vector这样的: 7 0 -6 5 8 0 10 -2

这是一个包含正数,负数和零作为元素的向量。

我想计算此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中是否已经存在这样一种效率更高的功能。

或者count_if可能有gsl_array个功能?

2 个答案:

答案 0 :(得分:2)

您可以使用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()
) ;

答案 1 :(得分:1)

他们state GSL实现了std :: valarray模型,我读了这样的声明,授权我使用类似的东西:

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