我一直在寻找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?