Я искал исходный код Sklean's Cython для дерева решений и обнаружил следующий нестандартный 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
]
})
Я не был ' t удалось найти определение Node
, используемое в части 'offsets'
приведенного выше кода, где-либо в документации Sklearn, но кодовая база Sklearn использует Node
вместо NODE_DTYPE
везде, где необходимо использовать эту структуру.
В частности, мне даже не удалось найти в Cython никакой документации, объясняющей, как работает создание этой структуры.
Может ли кто-нибудь помочь мне разобраться в этом? т.е., в частности, не создает ли приведенный выше код Cython для NODE_DTYPE
автоматически Node
numpy dtype (без необходимости отдельно объявлять Node
numpy dtype?