计算两个向量的欧氏距离
>>> import numpy
>>> vec1=[[1,1,1],[2,2,2]]
>>> vec2=[[2,2,2],[1,1,1]]
>>> vec1=numpy.array(vec1)
>>> vec2=numpy.array(vec2)
>>> vec1
array([[1, 1, 1],
[2, 2, 2]])
>>> vec2
array([[2, 2, 2],
[1, 1, 1]])
>>> dist = numpy.sqrt(numpy.sum(numpy.square(vec1 - vec2)))
>>> dist
2.4494897427831779>>> numpy.linalg.norm(vec1-vec2)
2.4494897427831779计算两个向量的余弦相似度
>>> vec1
array([[1, 1, 1],
[2, 2, 2]])
>>> vec2
array([[2, 2, 2],
[1, 1, 1]])
>>> num=float(numpy.sum(vec1*vec2))
>>> num
12.0>>> denom=numpy.linalg.norm(vec1)*numpy.linalg.norm(vec2)
>>> cos=num/denom
>>> denom
15.000000000000002>>> cos
0.79999999999999993>>> sim=0.5+0.5*cos
>>> sim
0.89999999999999991计算多维向量的余弦距离
def cosine_distance(x1, x2):
x1_norm = tf.sqrt(tf.reduce_sum(tf.square(x1), axis=1))
x2_norm = tf.sqrt(tf.reduce_sum(tf.square(x2), axis=1))
# 内积
x1_x2 = tf.reduce_sum(tf.multiply(x1, x2), axis=1)
cosin = x1_x2 / (x1_norm * x2_norm)
return cosin