Python 3.x 什么';“这是一个更大的问题。”;“肾盂道”;进行皮尔逊计算
好的,伙计们。我的教授说有一种方法可以不借助Python3中的任何循环来实现这个功能。我没看见。她建议使用zip、enumerate、readlines和split(“;”)(每次审阅后都会有一个“;”,如果一行中有两个,则表示审阅者没有审阅电影)。我所做的是在电影中阅读,在movMat列表中寻找比较电影。然后,我将它们与普通评论者进行比较。之后,我必须进行皮尔逊计算,包括获取当前电影的普通评论者、目标电影(比较电影)的值、所述普通评论者值的平均值、标准偏差以及最终的皮尔逊R相关性Python 3.x 什么';“这是一个更大的问题。”;“肾盂道”;进行皮尔逊计算,python-3.x,zip,enumerate,readlines,pearson,Python 3.x,Zip,Enumerate,Readlines,Pearson,好的,伙计们。我的教授说有一种方法可以不借助Python3中的任何循环来实现这个功能。我没看见。她建议使用zip、enumerate、readlines和split(“;”)(每次审阅后都会有一个“;”,如果一行中有两个,则表示审阅者没有审阅电影)。我所做的是在电影中阅读,在movMat列表中寻找比较电影。然后,我将它们与普通评论者进行比较。之后,我必须进行皮尔逊计算,包括获取当前电影的普通评论者、目标电影(比较电影)的值、所述普通评论者值的平均值、标准偏差以及最终的皮尔逊R相关性 def pC
def pCalc (movMat, movNumber, n)
indexes1 = [i for i,x in enumerate(movMat[movNumber][1].split(';')) if x == '1' or x == '2' or x == '3' or x == '4' or x == '5' ]
indexes2 = [i for i,x in enumerate(movMat[n][1].split(';')) if x == '1' or x == '2' or x == '3' or x == '4' or x == '5' ]
compare = list(set(indexes1).intersection(indexes2))
xi = []
for index, val in enumerate(movMat[movNumber][1].split(';')):
if index in compare:
xi.append(int(val))
average1 = sum(xi)/len(compare)
stdDev1 = statistics.stdev(xi)
yi = []
for index, val in enumerate(movMat[n][1].split(';')):
if index in compare:
yi.append(int(val))
average2 = sum(yi)/len(compare)
stdDev2 = statistics.stdev(yi)
r = 0
newSum = 0
for i in range(0, len(compare)):
newSum += ((xi[i]-average1)/stdDev1) * ((yi[i]-average2)/stdDev2)
r = (1/(len(compare)-1)) * newSum
输入的一个例子是:
此程序的主要部分处理参数调用、文件中的行等,但命令行参数“1”输入的示例输出将调用toy story,并将其与数据库中的其他电影进行比较,如下所示:
Movie number: Movie 1|Toy Story (1995)
*** No. of rows (movies) in matrix = 1682
*** No. of columns (reviewers) = 943
Output shows r-value, movie no.|name, no. of ratings
compare movie is 1|Toy Story (1995)
no. of common reviewers 452
target avg 3.8783185840707963
compare avg 3.8783185840707963
target std 0.9278967014291252
compare std 0.9278967014291252
r 0.999999999999991
compare movie is 2|GoldenEye (1995)
no. of common reviewers 104
target avg 3.8653846153846154
compare avg 3.201923076923077
target std 0.9456871165874381
compare std 0.9177833965361495
r 0.22178411018797187
compare movie is 3|Four Rooms (1995)
no. of common reviewers 78
target avg 3.717948717948718
compare avg 2.9358974358974357
target std 0.9520645495064435
compare std 1.2096982943568881
r 0.1757942980351483
compare movie is 4|Get Shorty (1995)
no. of common reviewers 149
target avg 3.87248322147651
compare avg 3.530201342281879
target std 0.9247979370536794
compare std 0.9970025819307402
r 0.10313529410109303
Pythonic会使用一个相关的模块,比如
scipy
或numpy
,来为您做这件事,但我想这是不允许的。这个问题可能对你有用,我可以试试,但它必须在学校远程服务器上工作,而且我认为我们没有在那里下载scipy或numpy。这可能不是你教授想要的。这对你来说确实有点帮助,但它只解决了一部分问题。我如何在剩下的等式中减少循环?现在很难看出你的一些代码的目的是什么。您能添加一些输入和输出示例吗?