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 *仍然起作用。
那怎么做正确呢?
答案 0 :(得分:1)
您的困惑似乎源于对npy_intp
的误解。它不是int *
的typedef。这是一个整数类型,足以容纳一个指针。