Numpy C-API:PyArrayObject提供了错误的维度

时间:2017-03-21 20:56:28

标签: python c numpy

我试图接受C中numpy数组的数组维度。

src.c

static PyObject*
array_dims(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *kwds)
{
    PyArrayObject *arg1=NULL;
    int i;

    // check for exactly one input argument and parse it to arg1
    if (!PyArg_ParseTuple(args, "O!", &PyArray_Type, &arg1)) return NULL;

    for(i = 0; i < PyArray_NDIM(arg1); i++){
        printf("%d \n", PyArray_DIMS(arg1)[i]);
    }

    return(Py_None);
}

run.py

import numpy as np

arr = np.asarray([[1,2,3],[3,4,5],[7,8,9]])
src.dims(arr)

控制台输出

3
0

第一个是正确的,但是对于i = 1,形状也应该是3。进一步调查显示,对于i = 2(手动调用),输出为&#34; 3&#34;还有,可能是偶然的,也可能是一些系统错误。

我也尝试了arg1-&gt;维度或PyArray_SHAPE(arg1),但两者都显示了相同的结果。

1 个答案:

答案 0 :(得分:0)

似乎是最新的numpy版本和Python 3.4的某种错误。切换到Python 3.5后,该函数提供了预期的行为。