【发布时间】:2011-01-31 15:57:00
【问题描述】:
我的程序处理 整数的 STL 向量,但有时我需要计算一些关于它们的统计数据。因此我使用 GSL 函数。为了避免将 STL 向量复制到 GSL 向量中,我创建了一个 GSL 向量视图,并将其提供给 GSL 函数,如以下代码所示:
#include <iostream>
#include <vector>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_statistics.h>
using namespace std;
int main( int argc, char* argv[] )
{
vector<int> stl_v;
for( int i=0; i<5; ++i )
stl_v.push_back( i );
gsl_vector_int_const_view gsl_v = gsl_vector_int_const_view_array( &stl_v[0], stl_v.size() );
for( int i=0; i<stl_v.size(); ++i )
cout << "gsl_v_" << i << "=" << gsl_vector_int_get( &gsl_v.vector, i ) << endl;
cout << "mean=" << gsl_stats_mean( (double*) gsl_v.vector.data, 1, stl_v.size() ) << endl;
}
编译后 (gcc -lstdc++ -lgsl -lgslcblas test.cpp),此代码输出如下:
gsl_v_0=0
gsl_v_1=1
gsl_v_2=2
gsl_v_3=3
gsl_v_4=4
mean=5.73266e-310
矢量视图已正确创建,但我不明白为什么平均值是错误的(它应该等于 10/5=2)。任何的想法?提前致谢。
【问题讨论】:
-
+1 表示第一个问题问得很好。