il mio programma manipola i vettori STL di numeri interi ma, di volta in volta, ho bisogno di calcolare alcune statistiche su di essi. Pertanto utilizzo le funzioni GSL. Per evitare di copiare il vettore STL in un vettore GSL, creo un GSL vettore vista, e dare alle funzioni GSL, come in questo pezzo di codice:In C++, come calcolare la media di un vettore di numeri interi usando una vista vettoriale e gsl_stats_mean?
#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;
}
Una volta compilato (gcc -lstdC++ -lgsl -lgslcblas test.cpp), questo codice Risulterà:
gsl_v_0=0
gsl_v_1=1
gsl_v_2=2
gsl_v_3=3
gsl_v_4=4
mean=5.73266e-310
il vettore vista viene creato correttamente, ma non capisco il motivo per cui la media è sbagliato (dovrebbe essere uguale a 10/5 = 2). Qualche idea? Grazie in anticipo.
+1 per una prima domanda ben fatta. – aschepler