我用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的平均函数?
答案 0 :(得分:0)
我的猜测是你必须在__getitem__
中提供一个接受一个int的c ++ %extend
重载,因为mean
会使数组变平,因此它可能会调用array[i]
即一个指数不是两个。