我正在尝试使用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);
}
运行
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(通常称为),输出也为“ 3”,可能是偶然的,也可能是一些系统错误。
我也尝试了arg1-> dimensions或PyArray_SHAPE(arg1),但是都显示了相同的结果。
最佳答案
最新的numpy版本和Python 3.4似乎是某种错误。切换到Python 3.5后,该函数将提供预期的行为。
关于python - Numpy C-API:PyArrayObject提供了错误的尺寸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42937977/