这几个 PYTHON 的函数的具体意义是什么啊?

2014-05-17 14:03:34 +08:00
 ditel
由于不是学PTTHON的,不知道这几个函数的具体意义?
可以帮忙翻译下吗?最好是每句都说下。
PS:自己只能看懂部分
def User_Similarity(train):
W=dict()
for u in train.keys():
for v in train.keys():
if u == v:
continue;
W[u][v] = len(train[u],train[v])
W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)

----------------------------------
#!/usr/bin/env python
# coding=utf-8
def UserSimilarity(train):
#建立倒排表
item_users = dict()
for u,items in train.items():
for i in item.keys():
if i not in item_users:
items_users[i] = set()
item_users[i].add(u)
#item_users即为物品到用户的倒排表
#计算用户之间的相关度
C = dict()#任意用户之间的相关度
N = dict()#用户正反馈物品的数目
for i ,users in item_users:
for u in users:
N[u] += 1
for v in users:
if u == v:
continue:
C[u][v] += 1
#最后计算结果矩阵
W = dict()
for u ,related_users in C.items():
for v,cuv in related_users:
W[u][v] = cuv / math.sqrt(N[u]* N[v]*1.0)
return W

-----------------------------------

def Recommend(user,train,W):
rank = dict()
interacted_items = train[user]
for v , wuv in sort(W[u].items,key = itemgetter(1),reverse = True)[0:k]:
for i ,rvi in train[v].items:
if i in interacted_items:
continue
rank[i] += wuv * rvi
return rank

---------------------
3697 次点击
所在节点    Python
20 条回复
lincanbin
2014-05-17 15:05:53 +08:00
没缩进怎么看?
ushuz
2014-05-17 15:13:20 +08:00
可以用gist在v2ex贴代码
imlonghao
2014-05-17 15:53:55 +08:00
Python没缩进你让我们看什么?
cbsw
2014-05-17 16:16:33 +08:00
LZ, 缩进是 Python 必不可少的一部分,就像其它你所知道的语言中的花括号一样重要,所以请用 github 的 gist,然后附上链接,V2EX 会自动帮你显示出好看(有意义)的代码
ditel
2014-05-17 16:27:24 +08:00
@cbsw @lincanbin @ushuz @imlonghao
有点麻烦啊。如果没有github账号,那是不是就没法帖gist的代码啦啊?
ditel
2014-05-17 16:28:18 +08:00
虽说写程序的都该有github的账号。但是,如果不喜欢用github这样的网站,岂不是在本网站贴代码就一坑啊!
还是不习惯一个网站都没有自己的代码高亮编辑。
像楼主这样新来的, 就不知道该怎么贴代码
ditel
2014-05-17 16:33:56 +08:00
User_Similarity函数?:

def User_Similarity(train):
--- W=dict()
--- for u in train.keys():
--- --- for v in train.keys():
--- --- --- if u == v:
--- --- --- --- continue;
--- --- --- W[u][v] = len(train[u],train[v])
--- --- --- W[u][v] /= math.sqrt(len(train[u]) * len(train[v]) * 1.0)

----------------------------------------------------------------------
PS:楼主还是不喜欢本站贴代码的方式,各位见谅下
ditel
2014-05-17 16:36:17 +08:00
UserSimilarity函数:(这是第二段)

#!/usr/bin/env python
# coding=utf-8
def UserSimilarity(train):
--- #建立倒排表
--- item_users = dict()
--- for u,items in train.items():
--- --- for i in item.keys():
--- --- if i not in item_users:
--- --- --- items_users[i] = set()
--- --- item_users[i].add(u)
--- #item_users即为物品到用户的倒排表
--- #计算用户之间的相关度
--- C = dict()#任意用户之间的相关度
--- N = dict()#用户正反馈物品的数目
--- for i ,users in item_users:
--- --- for u in users:
--- --- --- N[u] += 1
--- --- --- for v in users:
--- --- --- --- if u == v:
--- --- --- --- --- continue:
--- --- --- --- C[u][v] += 1
--- #最后计算结果矩阵
--- W = dict()
--- for u ,related_users in C.items():
--- --- for v,cuv in related_users:
--- --- --- W[u][v] = cuv / math.sqrt(N[u]* N[v]*1.0)
return W
ditel
2014-05-17 16:38:25 +08:00
Recommend函数:

def Recommend(user,train,W):
--- rank = dict()
--- interacted_items = train[user]
--- for v , wuv in sort(W[u].items,key = itemgetter(1),reverse = True)[0:k]:
--- --- for i ,rvi in train[v].items:
--- --- --- if i in interacted_items:
--- --- --- --- continue
--- --- --- rank[i] += wuv * rvi
--- return rank

-----------------------------------------------------------------

PS:像for v , wuv in sort这样的表达的什么啊?
ditel
2014-05-17 16:39:19 +08:00
davidli
2014-05-17 16:51:41 +08:00
把 Python 里的 list 当成 Java 里的 ArrayList 来理解吧
for v in train 即 for ( v : train)。 意即, 对于 train 这个 list 中的每一个元素v。
sort 即 Arrays.sort(), reverse=True 说明是从大到小排序

for v , wuv in sort(xxx) :
有一个list, 这个list里每一个元素都是 (a,b)的形式。
先对这个list进行排序,然后对于这个排好序的list中每一个(a,b), 使v=a, wuv=b, 然后处理
ushuz
2014-05-17 17:30:39 +08:00
@ditel 不需要GH账号,自己试一下不就知道了?用Gist麻烦....反而乐意去把空格都替换成 - ?
ditel
2014-05-17 18:06:39 +08:00
@ushuz 额。换就几下CTRL的事。
试啦啊,感觉要账号。
看过本站的代码啊,都是有用户的,难道不是?
skydiver
2014-05-17 18:07:26 +08:00
@ushuz 不用账号的话贴到v2ex貌似解析不了。
ditel
2014-05-17 18:11:13 +08:00
@davidli (a,b)这个是数组还是什么?楼主不是JAVA的,楼主PHP
wtbhk
2014-05-17 19:41:45 +08:00
@ditel 既然会PHP花一个小时看下Python简明教程就完全会了
davidli
2014-05-18 00:07:28 +08:00
@ditel
Python中特有的数据结构 tuple
当成 array[2] 来理解就行了。
我不会 PHP,所以只能用 Java 的东西来描述了, 因为大家都或多或少会一点 Java

另,楼上说的没错,Python 简单的很,花几分钟现学一下都来得及。
xiaowangge
2014-05-18 12:12:08 +08:00
不 “乐意” 用 gist ,那试试这个 http://paste.ubuntu.com/

;-)
ditel
2014-05-18 14:10:18 +08:00
ushuz
2014-05-21 12:12:41 +08:00
@ditel
@skydiver

无账号同样可以解析,看这里 /t/49664 的1楼。即使无法解析,至少也有链接可以去查看Gist。

另外帖子虽然不能编辑了,但是可以 APPEND,楼主可以把需要补充的内容附加在帖子后面。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/112968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX