mi programa manipula vectores STL de enteros pero, de vez en cuando, necesito calcular algunas estadísticas sobre ellos. Por lo tanto, utilizo las funciones GSL. Para evitar copiar el vector STL en un vector GSL, creo un GSL vector visión, y darle a las funciones de GSL, como en este trozo de código:En C++, ¿cómo calcular la media de un vector de números enteros utilizando una vista de vector y 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 vez compilado (gcc -lstdC++ -lgsl test.cpp -lgslcblas), este código muestra esto:
gsl_v_0=0
gsl_v_1=1
gsl_v_2=2
gsl_v_3=3
gsl_v_4=4
mean=5.73266e-310
la vista vector se creó correctamente pero no entiendo por qué la media es incorrecto (debe ser igual a 10/5 = 2). ¿Alguna idea? Gracias por adelantado.
+1 para una primera pregunta bien hecha. – aschepler