Estoy intentando escribir una C++ extensión para reemplazar la siguiente función de pitón con el fin de acelerar mi programaPass lista de Python a C++ extensión utilizando impulso pitón
La función de Python tiene el siguiente
def calc_dist(fea1, fea2):
#fea1 and fea2 are two lists with same length
...
escribí la función usando C++ y Python impulso como sigue:
#include <vector>
#include <boost/python.hpp>
double calc_dist(vector<double>& fea1, vector<double>& fea2)
{
int len = fea1.size();
double s=0;
for(int i=0; i<len;i++){
double p=fea1[i];
double q=fea2[i];
...//calculating..
}
return s;
}
BOOST_PYTHON_MODULE(calc_dist)
{
using namespace boost::python;
def("calc_dist",calc_dist);
}
y compilar el código CPP anterior en un archivo .so como
g++ calc_dist.cpp -shared -fPIC -o calc_dist.so -I /usr/include/python2.6 -lboost_python
y tratando de usar .so en un programa python, la importación funciona bien, lo que indica que el módulo puede importarse con éxito.
Sin embargo, cuando paso dos listas para el parámetro a la función, pitón dará errores como
ArgumentError: Python argument types in
calc_dist.calc_dist(list, list)
did not match C++ signature:
calc_dist.calc_dist(std::vector<float, std::allocator<float> >,
std::vector<float, std::allocator<float> >)
puede alguien ayudarme cómo resolver este problema? Es decir, ¿pasar una lista de Python a la extensión de C++ usando boost?
¡Muchas gracias!
Uso impulso :: :: ver [a esta pregunta ] (http://stackoverflow.com/questions/3761391/boostpython-python-list-to-stdvector) –