0
假设我有一个SWIG包装的类负责处理一些数据的指针,如下面的代码所示。我想从数据中构造一个numpy ndarray
对象并将其返回给用户。我希望它将数据作为缓冲区使用,但不会占用所有权。如果我是对的,我将使用numpy C++ api PyArray_SimpleNewFromData
。然而,我的问题是我如何返回到Python?如果我编写以下get
函数,SWIG会自动将它作为python对象返回吗?如果不是,我该怎么办?SWIG将PyObject作为python对象返回?
class Test {
public:
Test() { ptr_ = new uint8_t[200]; }
~Test() { delete [] ptr_; }
PyObject* get() {
npy_intp dims[1] = {25};
return PyArray_SimpleNewFromData(1, dims, NPY_DOUBLE, ptr_);
}
private:
uint8_t* ptr_;
};
顺便说一下,我也在努力寻找上述api的头文件和库文件。如果你知道,请告诉我。谢谢。
更新:
我试过SWIG包装这个类。除了当我在Python中调用get
函数(如下所示)时,其他所有工作都很好,我得到了分段错误。任何帮助表示赞赏。
x = Test()
y = x.get()
更新2:
看来PyArray_SimpleNewFromData
不赞成使用的功能。那么这仍然是支持的,还是有其他更推荐的方式吗?
我得到一个编译错误,如果我试图用一个浮点数做*。任何建议? – mkuse 2017-10-27 08:52:41