0
from math import sqrt
def sim_distance(prefs,person1,person2):
     si={}
     for item in prefs[person1]:
          if item in prefs[person2]:
               si[item]=1
     if len(si)==0: return 0
     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+sqrt(sum_of_squares))

reload(recommendations)
recommendations.sim_distance(critics,'Lisa Rose','Gene Seymour')

这是错误

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    recommendations.sim_distance(critics,'Lisa Rose','Gene Seymour')
NameError: name 'critics' is not defined

评论家是一个自定义数组

4

2 回答 2

1

这与重新加载命名空间没有任何关系。你根本没有定义critics.

于 2012-04-14T16:19:17.933 回答
0

这看起来可能是范围问题。如果您在不同的功能中定义评论家,那么评论家将只存在于该功能中。您在此处在函数的主要范围内引用评论家,因此您需要从创建它的函数中返回评论家,或者(不理想)最初在全局范围内定义它。

def initCritics():
    critics = []
    # make some critics

    return critics

critics = initCritics()

recommendations.sim_distance(critics,'Lisa Rose','Gene Seymour')
于 2012-04-14T16:24:19.250 回答