[英]SWIG return PyObject as python object?
假設我有一個SWIG封裝的類,負責處理一些數據的指針,如以下代碼所示。 我想從數據構造一個numpy ndarray
對象,並將其返回給用戶。 我希望它使用數據作為緩沖區,但不占用所有權。 如果我是對的,我將使用numpy C ++ API PyArray_SimpleNewFromData
。 但是,我的問題是如何將其返回給python? 如果我編寫以下get
函數,SWIG會自動將其作為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
是已棄用的函數。 那么這是否仍然受支持,或者還有其他推薦的方法嗎?
我在swig中使用typemap找出了解決方案:
%typemap(out) double* {
npy_intp dims[1] = {25};
$result = PyArray_SimpleNewFromData(1, dims, PyArray_DOUBLE, $1);
}
class Test {
public:
Test () { ptr_ = new uint8_t[200]; }
~Test() { delete [] ptr_; }
double* get() {
return (double*) ptr_;
}
private:
uint8_t* ptr_;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.