Numpy C扩展:在PyArrayObject中访问PyObjects

时间:2018-02-21 02:53:18

标签: python numpy python-extensions

我用pd.DataFrame创建了一个pandas数据帧({“A”:[“dog”,“cat”]})并将结果发送到c扩展名numpy数组。在C中,我做:

PyArrayObject * pArray = (PyArrayObject *) pArrayObj;
PyArray_Descr * pDesc = PyArray_DTYPE(pArray);
int kind = pDesc->kind;
npy_intp sz = PyArray_DIM(pArray, 0);
PyObject * p0 = (PyObject *) PyArray_GETPTR1(pArray, 0);

在上面的'kind'中包含'O'(对象数组)和sz = 2(如预期的那样)。但是p0似乎没有访问第一个对象:

(gdb) p *p0
$10 = {ob_refcnt = 140737227161872, ob_type = 0x7ffff06e8180}

注意损坏的refcnt和未解析的ob_type(期待PyUnicode_Type)。

有关正确获取指向每个元素的指针的建议吗?

我在Centos 7上使用numpy 1.14,g ++ 6.2.1

2 个答案:

答案 0 :(得分:0)

想出如何做到这一点:

/[^\s]+(=".*?"|=".*?[^s]+|=[^\s]+|=)/g

答案 1 :(得分:0)

我发现了这个问题,因为我遇到了同样的问题。原来的代码几乎是正确的,最后一行只需要更多的指针魔术:

PyArrayObject * pArray = (PyArrayObject *) pArrayObj;
PyObject * p0 = *(PyObject **) PyArray_GETPTR1(pArray, 0);