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

What is the correct type for PyArray_SimpleNewFromData()'s dims argument?

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* 有效。

那么它是怎么做到的呢?

您的困惑似乎源于对 npy_intp 是什么的误解。它不是 int * 的类型定义。它是一个 整数 类型,大到足以容纳一个指针。