我是一个有用的助手,可以为您翻译文本。
我正在尝试编写一个C++扩展来替换以下Python函数,以加速我的程序。
Python函数如下:
def calc_dist(fea1, fea2):
#fea1 and fea2 are two lists with same length
...
我使用c++和boost python编写了如下的函数:
#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);
}
编译上述cpp代码为.so文件,如下所示:
g++ calc_dist.cpp -shared -fPIC -o calc_dist.so -I /usr/include/python2.6 -lboost_python
当我试图在一个Python程序中使用.so文件时,导入操作正常,表明该模块成功地被导入。
然而,每当我将两个列表传递给函数参数时,Python会发生错误,例如:
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> >)
有谁可以帮我解决这个问题吗?即如何使用boost将Python列表传递给C++扩展程序?
非常感谢!