使用SWIG包装C++&书信电报;向量>;作为python NumPy数组 我有一个C++库,定义了以下(并且更像它们)类型: typedef std::vectorDoubleVec; typedef std::vectorDoubleVec; typedef std::vectorIntVec; typedef std::vectorIntVec;

使用SWIG包装C++&书信电报;向量>;作为python NumPy数组 我有一个C++库,定义了以下(并且更像它们)类型: typedef std::vectorDoubleVec; typedef std::vectorDoubleVec; typedef std::vectorIntVec; typedef std::vectorIntVec;,c++,numpy,swig,C++,Numpy,Swig,我正在尝试为一个库创建一个python接口来处理这样的对象。如标题所述,我希望我的接口转换为/从C++ STD::向量< /代码>和NoMPY NDARLY< > < /P> 我看到了numpy人和SWIG人提供的两种服务。问题是,代码< > NoMPy。i < /C> >是用来处理C/C++数组(不是C++向量)和 STDIVAL向量的。 有什么想法吗 我看到这个项目做了类似的事情,但他们的项目太大了,我很难弄清楚他们是如何完成这项特定任务的。试着以此为起点 %include "nump

我正在尝试为一个库创建一个python接口来处理这样的对象。如标题所述,我希望我的接口转换为/从C++ <代码> STD::向量< /代码>和NoMPY <代码> NDARLY< <代码> > < /P> 我看到了numpy人和SWIG人提供的两种服务。问题是,代码< > NoMPy。i < /C> >是用来处理C/C++数组(不是C++向量)和<代码> STDIVAL向量的。 有什么想法吗


我看到这个项目做了类似的事情,但他们的项目太大了,我很难弄清楚他们是如何完成这项特定任务的。

试着以此为起点

%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);
}
%}
%包括“numpy.i”
%应用(大小DIM1,双*排列1){(大小len,双*矢量)}
%重命名(foo)my_foo;
%内联%{
int my_foo(尺寸长度,双*矢量){
std::向量v;
v、 插入(v.end(),向量,向量+len);
返回foo(v);
}
%}
%应用(大小DIM1,大小DIM2,双*排列2){(大小len1,大小len2,双*矢量)}
%重命名(酒吧)我的酒吧;
%内联%{
int my_条(大小_t len1,大小_t len2,双*矢量){
标准向量<标准向量>v(len1);
对于(大小i=0;i
%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);
}
%}