PyArray_SimpleNewFromData()的dims参数的正确类型是什么?

时间:2019-01-21 13:05:19

标签: python c numpy-ndarray

numpy C API文档提供了以下签名:

PyObject* PyArray_SimpleNewFromData(int nd, npy_intp* dims, int typenum, void *data)

请注意,dims本质上是int **类型的。但是,我发现的所有使用此功能和类似功能的示例都通过类型int *,例如here

当将指针传递给整数时,我的代码可以正常工作,但是编译器抱怨“ dims”参数的指针类型不匹配。

PyObject *arr;

import_array();

npy_float d[] = {1, 2, 3, 4};
npy_intp dims[] = {sizeof d / sizeof *d};
arr = PyArray_SimpleNewFromData(1, dims, NPY_FLOAT, d);

从我对函数的工作原理的理解来看,我相信int *应该是正确的类型,因为它只是一个输入参数,它通知函数每个数组维有多少个条目。我不明白为什么文档和编译器都希望int *起作用,但是int *仍然起作用。

那怎么做正确呢?

1 个答案:

答案 0 :(得分:1)

您的困惑似乎源于对npy_intp的误解。它不是int *的typedef。这是一个整数类型,足以容纳一个指针。