4

我正在使用 gnu 科学库 (GSL)。假设我有gsl_vector这样的:7 0 -6 5 8 0 10 -2

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

我想计算 this 中非零元素或零元素的数量gsl_vector。我知道有一个调用count_ifC++ Vector 的函数。但是我通过gsl_vector.hand搜索gsl_blas.h,没有与之相等的功能。我可以通过评估它们来了解所有元素gsl_vector_get(),然后问 if 问题。

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

4

2 回答 2

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()
) ;
于 2012-11-27T11:51:25.803 回答
1

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

gsl_block vec;
/* initialize ... */
std::valarray<double> a(vec.data, vec.size);
/* use std:: galore */
于 2012-11-27T11:35:43.493 回答