在cython中为numpy定义自定义dtype

时间:2020-05-09 17:23:14

标签: numpy cython dtype

我一直在寻找Sklean的Cython source code for decision tree,并且发现了以下自定义numpy dtype(第71-85行)

# Repeat struct definition for numpy
NODE_DTYPE = np.dtype({
    'names': ['left_child', 'right_child', 'feature', 'threshold', 'impurity',
              'n_node_samples', 'weighted_n_node_samples'],
    'formats': [np.intp, np.intp, np.intp, np.float64, np.float64, np.intp,
                np.float64],
    'offsets': [
        <Py_ssize_t> &(<Node*> NULL).left_child,
        <Py_ssize_t> &(<Node*> NULL).right_child,
        <Py_ssize_t> &(<Node*> NULL).feature,
        <Py_ssize_t> &(<Node*> NULL).threshold,
        <Py_ssize_t> &(<Node*> NULL).impurity,
        <Py_ssize_t> &(<Node*> NULL).n_node_samples,
        <Py_ssize_t> &(<Node*> NULL).weighted_n_node_samples
    ]
})

我无法在Sklearn文档的任何地方找到以上代码的Node部分中使用的'offsets'的定义,但是Sklearn代码库使用Node而不是{{ 1}}到处都需要使用此结构。

尤其是,我什至无法在Cython中找到任何说明该结构如何工作的文档。

有人可以帮助我理解这一点吗?即,特别是上述NODE_DTYPE的Cython代码是否会自动创建NODE_DTYPE numpy dtype(而无需分别声明Node numpy dtype?

0 个答案:

没有答案