import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
feature_numpy=[[1,2,3],[3,4,5],[8,6,7],[219,392,1],[23,1,2]]
query_vector=[[3,42,33]]
result=cosine_similarity(feature_numpy,query_vector)
result=result.flatten()
>>> result
array([ 0.92921051, 0.90407881, 0.77639014, 0.71409719, 0.14317521])
ind = np.argpartition(result,-2)[-2:] # 返回 top2 numpy 1.8版本才有
>>> ind
array([1, 0])
>>> result[ind]
array([ 0.90407881, 0.92921051])
ind= ind[np.argsort(-result[ind])] # 降序排列
至此就是通过query查询特征矩阵相似度的完整计算方法,但是我并未对性能做评估,需要考虑当特征矩阵过大时的计算速度,如果超过千万甚至更多的矩阵需要考虑分布式计算方式来满足大量特征topk的计算
网友评论