У меня есть некоторые данные как таковые:
>>> X[:5]
array([[0.024, 2, 1],
[0.006999999999999999, 1, 1],
[0.028999999999999998, 7, 2],
[0.017, 1, 1],
[0.003, 3, 2]], dtype=object)
>>> len(X)
13000
По какой-то причине, когда у меня есть следующее:
nbrs = NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric='euclidean')
nbrs.fit(X)
dist, ind = nbrs.kneighbors(X)
Для вычисления соседей требуется меньше минуты.
Однако, если я сделаю это:
def myeuclid(x, y):
return np.sum((x-y)**2)
nbrs = NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric=myeuclid)
nbrs.fit(X)
dist, ind = nbrs.kneighbors(X)
Это не завершает sh вычисления. Я оставил его на несколько часов. Почему это так? Я на самом деле использую пользовательскую функцию, отличную от евклидовой, для измерения расстояния, но, конечно, там происходит то же самое. Я основывал metric=func
параметр, основанный на этом ответе