Tôi đang cố gắng để viết một C++ mở rộng để thay thế chức năng python sau đây để tăng tốc độ chương trình của tôiđèo python danh sách để C++ mở rộng việc sử dụng tăng python
Chức năng python trông giống như sau
def calc_dist(fea1, fea2):
#fea1 and fea2 are two lists with same length
...
tôi đã viết các chức năng sử dụng C++ và tăng python như sau:
#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);
}
và biên dịch mã cpp trên vào một file .so như
g++ calc_dist.cpp -shared -fPIC -o calc_dist.so -I /usr/include/python2.6 -lboost_python
và cố gắng sử dụng .so trong chương trình python, quá trình nhập hoạt động tốt, cho biết mô-đun có thể nhập thành công.
Tuy nhiên, bất cứ khi nào tôi vượt qua hai danh sách để các tham số cho hàm, trăn sẽ cung cấp cho các lỗi như
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> >)
có thể bất kỳ một giúp tôi làm thế nào để giải quyết vấn đề này? tức là vượt qua một danh sách python để C++ mở rộng bằng cách sử dụng tăng?
Cảm ơn rất nhiều!
Sử dụng boost :: python :: danh sách xem [câu hỏi này ] (http://stackoverflow.com/questions/3761391/boostpython-python-list-to-stdvector) –