我正在使用gnu科学图书馆(GSL)。
说我有gsl_vector
这样的:
7 0 -6 5 8 0 10 -2
这是一个包含正数,负数和零作为元素的向量。
我想计算此gsl_vector
中非零元素或零元素的数量。
我知道有一个名为count_if
的函数用于C ++向量。但我搜索gsl_vector.h
和gsl_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
个功能?
答案 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)