Я пытаюсь расширить некоторые sklearn
классы в модуле sklearn.neighbors.dist_metrics
. Однако весь этот модуль написан на Cython, и вещи, которые я хочу сделать с моим пользовательским классом, должны реализовывать cdef dist
(в отличие от def dist
), очевидно.
Таким образом, в моем собственном модуле (сейчас я на самом деле использую jupyter %%cython
) я хотел бы реализовать свой собственный класс в Cython, реализуя метод cdef dist
по мере необходимости. Однако в этом же модуле, в модуле sklearn.neighbors.typedefs
и, возможно, в других модулях, которые мне нужно импортировать, есть ряд других cdef
. Когда я пытаюсь импортировать эти вещи, я получаю ошибки различного рода.
Когда я пытаюсь наивно import
:
%%cython
import numpy as np
from sklearn.neighbors.dist_metrics import DistanceMetric
from sklearn.neighbors.typedefs import DTYPE_t, ITYPE_t
cdef class NewDistance(sklearn.neighbors.DistanceMetric):
cdef inline DTYPE_t dist(self, DTYPE_t* x1, DTYPE_t* x2,
ITYPE_t size) nogil except -1:
return 5
Я получаю ошибки, свидетельствующие о том, что, как только вещи были «питонизированы», я не могу использовать их в определении «cython»:
Error compiling Cython file:
...
First base of 'KernelDistance' is not an extension type
...
'DTYPE_t' is not a type identifier
Существует ключевое слово cimport
, поэтому:
%%cython
import numpy as np
from sklearn.neighbors.dist_metrics cimport DistanceMetric
from sklearn.neighbors.typedefs cimport DTYPE_t, ITYPE_t
cdef class NewDistance(sklearn.neighbors.DistanceMetric):
cdef inline DTYPE_t dist(self, DTYPE_t* x1, DTYPE_t* x2,
ITYPE_t size) nogil except -1:
return 5
Annnnndddd ...
Error compiling Cython file:
....
'sklearn/neighbors/dist_metrics.pxd' not found
....
'sklearn/neighbors/typedefs.pxd' not found
Как можно импортировать файлы Cython из других библиотек?