欧几里德距离Python实现

Ham*_*aya 6 python euclidean-distance

我正在使用编程集体智慧的以下代码,这是一本计算两位电影评论家之间的eclidian距离的书中的函数.

此函数对字典中排名的差异求和,但n维中的欧几里德距离还包括该和的平方根.

AFAIK,因为我们使用相同的功能对每个人进行排名无关紧要我们是否平分根,但我想知道是否有特定原因?


from math import sqrt 
# Returns a distance-based similarity score for person1 and person2 
def sim_distance(prefs,person1,person2): 
  # Get the list of shared_items 
  si={} 
  for item in prefs[person1]: 
    if item in prefs[person2]: 
       si[item]=1 
  # if they have no ratings in common, return 0 
  if len(si)==0: return 0 
  # Add up the squares of all the differences 
  sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2) 
                      for item in prefs[person1] if item in prefs[person2]]) 
  return 1/(1+sum_of_squares) 
Run Code Online (Sandbox Code Playgroud)

Pau*_*ier 12

不使用平方根的原因是因为它在计算上很昂贵; 它是单调的(即,它保留顺序)和方形函数,所以如果你感兴趣的只是距离的顺序,那么平方根是不必要的(并且,如上所述,计算上非常昂贵).