Вычислить расстояния между 2 матрицами вектора - PullRequest
0 голосов
/ 29 сентября 2018

У меня проблема с трансляцией Numpy между двумя матрицами.Мне нужно вычислить евклидово расстояние между 2 матрицами для классификатора knn.Я уже сделал это с двумя циклами и одним циклом, но это слишком медленно.Я ищу это с вещанием Numpy без какого-либо явного цикла, но я застрял.

Версия с двумя циклами:

num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
    for j in range(num_train):
        dists[i, j] = np.sqrt(np.sum(np.power(self.X_train[j, :] - X[i, :], 2)))
return dists

Версия с одним циклом:

num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
for i in range(num_test):
    dists[i, :] = np.sqrt(np.sum(np.power(self.X_train - X[i, :], 2), axis=1))
return dists

Форма X_train (5000, 784) и X (500,784).Вывод должен иметь форму (500, 5000).

У вас есть идеи, чтобы помочь мне?

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете использовать евклидово расстояние Сципи:

from scipy.spatial import distance
x1 = np.asarray([[1,2,3],[4,5,6]])
x2 = np.asarray([[1,2,40],[14,5,6]])

for i in range(0,x1.shape[0]):
    print distance.euclidean(x1[i], x2[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...