【问题标题】:How to get my own C++ array class to work with numpy using SWIG and g如何使用 SWIG 和 g 让我自己的 C++ 数组类与 numpy 一起使用
【发布时间】: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 的均值函数?

【问题讨论】:

标签: python c++ numpy swig


【解决方案1】:

我的猜测是,您必须在您的 %extend 中提供 C++ __getitem__ 的重载,它接受一个 int,因为 mean 将数组展平,因此它可能调用 array[i],即使用一个索引,而不是两个.

【讨论】:

  • 我认为你是对的。我必须让 array[i] 返回行向量。然后一切顺利!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2016-11-15
  • 2017-12-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多