Cython内联方法无法访问

时间:2018-08-29 16:26:31

标签: python scikit-learn cython

我正在尝试使用一些用Cython编写的sklearn模块(我不会说)。在模块中,定义了一个方法cdef inline...,并且似乎模块中的其他cdef方法都使用了这些方法,但是我无法访问它们。

https://www.patricktullytherapy.com/test/shorter-header-code/是定义类的地方,并且有方法dist

cdef class EuclideanDistance(DistanceMetric):
    #STUFF

    cdef inline DTYPE_t dist(self, DTYPE_t* x1, DTYPE_t* x2,
                             ITYPE_t size) nogil except -1:
        return euclidean_dist(x1, x2, size)

    #MORESTUFF

Heredist方法已在其他地方使用:

cdef inline DTYPE_t dist(self, DTYPE_t* x1, DTYPE_t* x2,
                         ITYPE_t size) nogil except -1:
    """Compute the distance between arrays x1 and x2"""
    self.n_calls += 1
    if self.euclidean:
        return euclidean_dist(x1, x2, size)
    else:
        return self.dist_metric.dist(x1, x2, size)   ####HERE!!!!

但是当我尝试使用此方法时,它根本不存在。...

import sklearn.neighbors
help(sklearn.neighbors.dist_metrics.EuclideanDistance)

如何访问dist方法?

1 个答案:

答案 0 :(得分:0)

查看DistanceMetric class。旨在像这样使用:

from sklearn.neighbors import DistanceMetric
dist = DistanceMetric.get_metric('euclidean')

print(dist)
# <sklearn.neighbors.dist_metrics.EuclideanDistance at 0x7fabe405e848>

然后使用pairwise()访问dist方法,它将在内部调用dist()

X = [[0, 1, 2], [3, 4, 5]]

dist.pairwise(X)
# array([[0.        , 5.19615242],
#       [5.19615242, 0.        ]])

您还可以在pairwise()方法中使用两个数组X,Y和