У меня есть код для вычисления косинуса сходства между двумя матрицами:косинус вычисление подобия между двумя матрицами
def cos_cdist_1(matrix, vector):
v = vector.reshape(1, -1)
return sp.distance.cdist(matrix, v, 'cosine').reshape(-1)
def cos_cdist_2(matrix1, matrix2):
return sp.distance.cdist(matrix1, matrix2, 'cosine').reshape(-1)
list1 = [[1,1,1],[1,2,1]]
list2 = [[1,1,1],[1,2,1]]
matrix1 = np.asarray(list1)
matrix2 = np.asarray(list2)
results = []
for vector in matrix2:
distance = cos_cdist_1(matrix1,vector)
distance = np.asarray(distance)
similarity = (1-distance).tolist()
results.append(similarity)
dist_all = cos_cdist_2(matrix1, matrix2)
results2 = []
for item in dist_all:
distance_result = np.asarray(item)
similarity_result = (1-distance_result).tolist()
results2.append(similarity_result)
results
является
[[1.0000000000000002, 0.9428090415820635],
[0.9428090415820635, 1.0000000000000002]]
Однако results2
является [1.0000000000000002, 0.9428090415820635, 0.9428090415820635, 1.0000000000000002]
Мой идеальный результат results
, что означает, что результат содержит списки значений сходства, но я хочу сохранить расчет между двумя матрицами вместо вектора и матрицы, любая хорошая идея?
Не могли бы вы нормализовать столбцы матрицы, а затем AB»будет матрица подобия. Используйте np.dot (A, B.T) – Scott
спасибо за ваши комментарии, но я должен держать матрицу такой, какой она есть, так как она имеет другое значение – gladys0313