У меня есть список векторов объектов, и я хотел бы вычислить расстояние L2 вектора объектов до всех других векторов объектов в качестве показателя уникальности.Здесь min_distances[i]
дает норму L2 i-го вектора признаков.
import numpy as np
# Generate data
nrows = 2000
feature_length = 128
feature_vecs = np.random.rand(nrows, feature_length)
# Calculate min L2 norm from each feature vector
# to all other feature vectors
min_distances = np.zeros(nrows)
indices = np.arange(nrows)
for i in indices:
min_distances[i] = np.min(np.linalg.norm(
feature_vecs[i != indices] - feature_vecs[i],
axis=1))
Быть O (n ^ 2) мучительно медленно и хотело бы его оптимизировать.Можно ли избавиться от цикла for / vectorize, чтобы min
и linalg.norm
вызывались только один раз?