Ich versuche, eine C++ Erweiterung zu schreiben, die folgende Python-Funktion zu ersetzen, um mein Programm zu beschleunigenPass Python Liste C++ Erweiterung mit boost Python
Die Python-Funktion wie folgt
siehtdef calc_dist(fea1, fea2):
#fea1 and fea2 are two lists with same length
...
ich schrieb die Funktion C++ und Boost-python wie folgt:
#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);
}
und übersetzen Sie die oben cpp Code in eine .so-Datei wie
g++ calc_dist.cpp -shared -fPIC -o calc_dist.so -I /usr/include/python2.6 -lboost_python
und versuchen, die .so in einem Python-Programm zu verwenden, funktioniert der Import gut, was darauf hinweist, dass das Modul erfolgreich importiert werden kann.
Jedes Mal, wenn ich zwei Listen an die Parameter an die Funktion übergeben, wird Python geben Fehler wie
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> >)
kann mir helfen, wie dieses Problem zu lösen? d., übergeben Sie eine Python-Liste an die C++ Erweiterung mit boost?
Vielen Dank!
Verwendung boost :: Python :: Liste [diese Frage ] (http://stackoverflow.com/questions/3761391/boostpython-python-list-to-stdvector) –