我有一个C++库,它定义了以下(更像它们)类型:
typedef std::vector< double > DoubleVec;
typedef std::vector< DoubleVec > DoubleVecVec;
typedef std::vector< int > IntVec;
typedef std::vector< IntVec > IntVecVec;
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个处理类似对象的库的python接口.正如标题所述,我希望我的界面能够转换为C++ std::vector
和numpy ndarray
.
我看到两个numpy.i
人都是由numpy人和std_vector.i
SWIG人提供的.问题是numpy.i
为处理C/C++数组(不是C++向量)而创建的,并且std_vector.i
不直接转换为numpy数组.
有任何想法吗?
我已经看到FEniCS项目已经做了类似的事情,但他们的项目非常庞大,以至于我很难找到他们如何完成这项具体任务.
尝试以此作为起点。
%include "numpy.i"
%apply (size_t DIM1, double* IN_ARRAY1) {(size_t len_, double* vec_)}
%rename (foo) my_foo;
%inline %{
int my_foo(size_t len_, double* vec_) {
std::vector<double> v;
v.insert(v.end(), vec_, vec_ + len_);
return foo(v);
}
%}
%apply (size_t DIM1, size_t DIM2, double* IN_ARRAY2) {(size_t len1_, size_t len2_, double* vec_)}
%rename (bar) my_bar;
%inline %{
int my_bar(size_t len1_, size_t len2_, double* vec_) {
std::vector< std::vector<double> > v (len1_);
for (size_t i = 0; i < len1_; ++i) {
v[i].insert(v[i].end(), vec_ + i*len2_, vec_ + (i+1)*len2_);
}
return bar(v);
}
%}
Run Code Online (Sandbox Code Playgroud)