我有以下C ++
class myfun{
public:
virtual double eval(arma::vec& x){};
};
double op(myfun* f, arma::vec& x){
return f->eval(x);
}
其中arma::vec
是一个armadillo c ++向量,我使用armanpy.i将一个numpy数组转换为arma :: vec对象,反之亦然。
启用swig director并为上述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。
谢谢!
答案 0 :(得分:0)
在您的情况下,请查看提供犰狳SWIG文件的armanpy。
答案 1 :(得分:0)
您可以使用Github上的这个存储库来完成此任务,该存储库使用了armanpy和armadillo 8.500.1
https://github.com/Wolframm74/armadillo_armanpy/blob/master/README.md
按照以下步骤开始编译代码,然后在示例上进行构建。它具有如何通过SWIG将python的numpy数组转换为armadillo数组的示例。