如何让我自己的c ++数组类使用SWIG使用numpy,g

时间:2014-04-20 22:42:20

标签: python c++ numpy swig

我用C ++创建了自己的2D数组类,并使用SWIG使用Python。我还将它扩展为具有一些基本功能,如numpy数组。例如,我在我的Array2D类中创建了一个方法 getitem ,它返回数组的元素:

%extend Array2D{
     double __getitem__(vector<int> v) {
        return (*self)[v[0]][v[1]];
    }
}

使用swig编译c ++扩展后,我可以将其导入python并获取一个Array2D对象:

>>>import myclass
>>>A = myclass.Array2D(2,2,1.0)

创建一个2x2矩阵的1。由于我的扩展方法,我可以像numpy一样检索单个元素。

>>>A[0,1]
>>> 1.0

这很棒,但是当我尝试使用numpy的mean函数时,我收到以下错误:

>>>mean(A)
>>>TypeError: in method 'dblArray2D___getitem__', argument 2 of type 'std::vector< int >'

似乎numpy的mean函数不知道如何处理std :: vector。我需要使用 getitem 方法或SWIG接口文件来使我的Array2D使用numpy的平均函数?

1 个答案:

答案 0 :(得分:0)

我的猜测是你必须在__getitem__中提供一个接受一个int的c ++ %extend重载,因为mean会使数组变平,因此它可能会调用array[i]即一个指数不是两个。