определение пользовательского dtype для numpy в cython - PullRequest
0 голосов
/ 09 мая 2020

Я искал исходный код 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?

...