Возможно, было бы более эффективно использовать sklearn.metrics.pairwise.cosine_similarity
с np.argmax
(но я не делал никаких тестов), я придумал небольшое изменение в вашем коде:
def most_similar(x, M):
dot_product = np.dot(x, M.T)
norm_a = np.linalg.norm(x)
norm_b = np.linalg.norm(M,axis=1)
score = dot_product / (norm_a * norm_b)
return np.argmax(score)
Вы бывозможно, нужно перебрать список, но здесь аргумент M
- это массив пустых значений (каждая строка - это ваш вектор, элементы v_list
), который вы можете легко получить с помощью np.array(v_list)
.