【发布时间】:2014-04-20 22:42:19
【问题描述】:
我在 C++ 中创建了自己的二维数组类,并使用 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 矩阵。由于我的扩展方法,我可以像使用 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 的均值函数?
【问题讨论】:
-
首先我建议通过引用传递
v,甚至是常量引用