使用了一段时间的numpy之后,想阅读以下numpy的c代码实现。在看到min, max, sum时,想看看如何根据axis参数去进行底层的实现。
如果没有理解错误的话:这几个函数入口在methods.c中的array_methods结构体中定义:
{"max",
(PyCFunction)array_max,
METH_VARARGS | METH_KEYWORDS, NULL},
{"mean",
(PyCFunction)array_mean,
METH_VARARGS | METH_KEYWORDS, NULL},
{"min",
(PyCFunction)array_min,
METH_VARARGS | METH_KEYWORDS, NULL},
但是array_max函数实现是:
static PyObject *
array_max(PyArrayObject *self, PyObject *args, PyObject *kwds)
{
NPY_FORWARD_NDARRAY_METHOD("_amax");
}
我不太明白这个NPY_FORWARD_NDARRAY_METHOD是如何找到对应callable来执行max函数的?
#define NPY_FORWARD_NDARRAY_METHOD(name) \
static PyObject *callable = NULL; \
npy_cache_import("numpy.core._methods", name, &callable); \
if (callable == NULL) { \
return NULL; \
} \
return forward_ndarray_method(self, args, kwds, callable)