У меня есть этот код, который я хочу сделать более эффективным:
distances = []
for row, lab in zip(train_set, train_labels):
distance = np.sum(np.linalg.norm(row - exemple_row, axis=1))
distances.append((distance, lab))
distances.sort()
, где train_set
- это массив 3 измерений numpy, train_labels
- это массив 1-мерного np и exemple
является массивом из 2 измерений.
exemple
- это строка, в которой каждая запись представляет собой координаты N измерений. Каждая строка в train_set
имеет то же измерение, что и exemple
, и каждая запись строки представляет собой координаты измерений N.
Чтобы прояснить ситуацию, вот пример:
exemple = [[0, 0, 1], [0, 1, 0], [1, 0, 0]]
train_set =
[
[[0, 0, 1], [0, 1, 0], [1, 0, 0]],
[[0, 0, 1], [0, 1, 0], [0, 1, 0]],
[[1, 0, 0], [1, 0, 0], [0, 1, 0]],
]
Расстояние между первой строкой train_set и instancele равно 0. Для второй строки это 1, а для последней строки - 3. Таким образом, distances
будет списком или numpy массивом, содержащим [0 1 3] .
Я уже сделал это с помощью списка понимания, но, тем не менее, безусловно, есть способ улучшить его, возможно, с помощью некоторых numpy методов?
Спасибо!
PS: я не хочу добавлять в свой проект новую библиотеку (например, scipy или другую)