【发布时间】:2023-04-07 17:47:01
【问题描述】:
我有一个如下C++
class myfun{
public:
virtual double eval(arma::vec& x){};
};
double op(myfun* f, arma::vec& x){
return f->eval(x);
}
arma::vec
是一个犰狳 c++ 向量,我使用 armanpy.i 将 numpy 数组转换为 arma::vec 对象,反之亦然。
在启用 swig 导向器并为上述 C++ 代码创建 SWIG 接口后,我创建了一个 python 类,它重新定义了 eval 虚拟方法:
class f(mymodule.myfun):
def __init__(self):
super(f,self).__init__()
def eval(self,x):
print x
return 3.14
在python中,我先创建了一个f的实例,它继承了myfun:
b = f()
然后,我将其传递给op
:
mymodule.op(b,array([3.,4.]))
哪个输出
<Swig Object of type 'arma::vec *' at 0x10e6dcc30>
3.14
Python 没有将 arma::vec * 解释为一个 numpy 数组,我认为它是在 armanpy.i 文件中执行的。有任何想法吗?我没有与 arma::vec 结婚,我可以用一个 numpy 向量替换 arma::vec。
谢谢!
【问题讨论】:
标签:
python
c++
numpy
swig
armadillo
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用 SWIG 在 C++ 中调用 python 函数? - Python技术站