如何从PyArrayObject获取值?

2 投票
1 回答
797 浏览
提问于 2025-04-18 10:32

我试着从一个列表中获取值。这个列表在Python中是这样定义的:

Line1 = [[[146.0, 560.0], [337.0, 478.0]], 
         [[204.0, 612.0], [397.0, 536.0]],
         [[166.0, 437.0], [350.0, 434.0]], 
         [[166.0, 552.0], [350.0, 546.0]],
         [[146.0, 560.0], [337.0, 478.0]], 
         [[204.0, 612.0], [397.0, 536.0]],
         [[166.0, 437.0], [350.0, 434.0]], 
         [[166.0, 552.0], [350.0, 546.0]]] 

通过以下方式解析成PyArrayObject:

PyArrayObject *lineA = (PyArrayObject*) PyArray_FROMANY (objLineA, PyArray_DOUBLE, 3, 3, NPY_IN_ARRAY);
if (!lineA) {
    PyErr_SetString(PyExc_ValueError, "expected [Layer][point][x] ");
       return NULL;
}

到现在为止一切看起来都没问题,维度也正常。但是当我尝试:

struct pPoint {
    float x;
    float y;
};
...

struct pPoint p1a, p1b;

...
    p1a.x = *((float * )PyArray_GETPTR3(lineA, 0, 0, 0));
    p1a.y = *((float * )PyArray_GETPTR3(lineA, 0, 0, 1));
    p1b.x = *((float * )PyArray_GETPTR3(lineA, 0, 1, 0));
    p1b.y = *((float * )PyArray_GETPTR3(lineA, 0, 1, 1));
...

所有的值都是零。

从PyObjArray中获取值的最好和最简单的方法是什么?为什么会是0.0?

1 个回答

0

我遇到过同样的问题。当我打印出这个值时,它总是显示为0.0。你可以试着把C语言中的所有'float'都改成'double'。在Python中,float类型相当于C语言中的double类型。你还把它的类型声明为PyArray_DOUBLE。

撰写回答