मैं आदेश मेरा कार्यक्रम में तेजी लाने के लिए निम्नलिखित अजगर समारोह को बदलने के लिए एक सी ++ विस्तार लिखने के लिए कोशिश कर रहा हूँ का उपयोग करपास अजगर सूची बढ़ावा अजगर
अजगर समारोह निम्नलिखित
def calc_dist(fea1, fea2):
#fea1 and fea2 are two lists with same length
...
तरह लग रहा है
#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);
}
और
तरह एक .so फ़ाइल में ऊपर सीपीपी कोड संकलन:मैं C++ और बढ़ावा अजगर का उपयोग कर इस प्रकार की तरह समारोह लिखा था
g++ calc_dist.cpp -shared -fPIC -o calc_dist.so -I /usr/include/python2.6 -lboost_python
और एक पायथन कार्यक्रम में .so का उपयोग करने की कोशिश कर रहा है, आयात ठीक काम करता है, यह दर्शाता है कि मॉड्यूल सफलतापूर्वक आयात किया जा सकता है।
तरह
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> >)
बहरहाल, जब भी मैं समारोह के लिए पैरामीटर के लिए दो सूचियों गुजरती हैं, अजगर दे देंगे त्रुटियों किसी भी एक मेरी मदद कर सकते हैं कि कैसे इस समस्या को हल करने के लिए? यानी बूस्ट का उपयोग कर सी ++ एक्सटेंशन में एक पायथन सूची पास करते हैं?
बहुत बहुत धन्यवाद!
उपयोग :: अजगर :: सूची देखने के [इस सवाल ] (http://stackoverflow.com/questions/3761391/boostpython-python-list-to-stdvector) –