1
lincanbin 2014-05-17 15:05:53 +08:00
没缩进怎么看?
|
2
ushuz 2014-05-17 15:13:20 +08:00
可以用gist在v2ex贴代码
|
3
imlonghao 2014-05-17 15:53:55 +08:00
Python没缩进你让我们看什么?
|
4
cbsw 2014-05-17 16:16:33 +08:00
LZ, 缩进是 Python 必不可少的一部分,就像其它你所知道的语言中的花括号一样重要,所以请用 github 的 gist,然后附上链接,V2EX 会自动帮你显示出好看(有意义)的代码
|
5
ditel OP |
6
ditel OP 虽说写程序的都该有github的账号。但是,如果不喜欢用github这样的网站,岂不是在本网站贴代码就一坑啊!
还是不习惯一个网站都没有自己的代码高亮编辑。 像楼主这样新来的, 就不知道该怎么贴代码 |
7
ditel OP 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:楼主还是不喜欢本站贴代码的方式,各位见谅下 |
8
ditel OP 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 |
9
ditel OP 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这样的表达的什么啊? |
11
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, 然后处理 |
17
davidli 2014-05-18 00:07:28 +08:00
@ditel
Python中特有的数据结构 tuple 当成 array[2] 来理解就行了。 我不会 PHP,所以只能用 Java 的东西来描述了, 因为大家都或多或少会一点 Java 另,楼上说的没错,Python 简单的很,花几分钟现学一下都来得及。 |
18
xiaowangge 2014-05-18 12:12:08 +08:00
|
19
ditel OP |
20
ushuz 2014-05-21 12:12:41 +08:00
|