V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ditel
V2EX  ›  Python

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

  •  
  •   ditel ·
    deatil · 2014-05-17 14:03:34 +08:00 · 3582 次点击
    这是一个创建于 3638 天前的主题,其中的信息可能已经有所发展或是发生改变。
    由于不是学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

    ---------------------
    20 条回复    2014-05-21 12:12:41 +08:00
    lincanbin
        1
    lincanbin  
       2014-05-17 15:05:53 +08:00
    没缩进怎么看?
    ushuz
        2
    ushuz  
       2014-05-17 15:13:20 +08:00
    可以用gist在v2ex贴代码
    imlonghao
        3
    imlonghao  
       2014-05-17 15:53:55 +08:00
    Python没缩进你让我们看什么?
    cbsw
        4
    cbsw  
       2014-05-17 16:16:33 +08:00
    LZ, 缩进是 Python 必不可少的一部分,就像其它你所知道的语言中的花括号一样重要,所以请用 github 的 gist,然后附上链接,V2EX 会自动帮你显示出好看(有意义)的代码
    ditel
        5
    ditel  
    OP
       2014-05-17 16:27:24 +08:00
    @cbsw @lincanbin @ushuz @imlonghao
    有点麻烦啊。如果没有github账号,那是不是就没法帖gist的代码啦啊?
    ditel
        6
    ditel  
    OP
       2014-05-17 16:28:18 +08:00
    虽说写程序的都该有github的账号。但是,如果不喜欢用github这样的网站,岂不是在本网站贴代码就一坑啊!
    还是不习惯一个网站都没有自己的代码高亮编辑。
    像楼主这样新来的, 就不知道该怎么贴代码
    ditel
        7
    ditel  
    OP
       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
        8
    ditel  
    OP
       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
        9
    ditel  
    OP
       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
        10
    ditel  
    OP
       2014-05-17 16:39:19 +08:00
    davidli
        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, 然后处理
    ushuz
        12
    ushuz  
       2014-05-17 17:30:39 +08:00
    @ditel 不需要GH账号,自己试一下不就知道了?用Gist麻烦....反而乐意去把空格都替换成 - ?
    ditel
        13
    ditel  
    OP
       2014-05-17 18:06:39 +08:00
    @ushuz 额。换就几下CTRL的事。
    试啦啊,感觉要账号。
    看过本站的代码啊,都是有用户的,难道不是?
    skydiver
        14
    skydiver  
       2014-05-17 18:07:26 +08:00
    @ushuz 不用账号的话贴到v2ex貌似解析不了。
    ditel
        15
    ditel  
    OP
       2014-05-17 18:11:13 +08:00
    @davidli (a,b)这个是数组还是什么?楼主不是JAVA的,楼主PHP
    wtbhk
        16
    wtbhk  
       2014-05-17 19:41:45 +08:00
    @ditel 既然会PHP花一个小时看下Python简明教程就完全会了
    davidli
        17
    davidli  
       2014-05-18 00:07:28 +08:00
    @ditel
    Python中特有的数据结构 tuple
    当成 array[2] 来理解就行了。
    我不会 PHP,所以只能用 Java 的东西来描述了, 因为大家都或多或少会一点 Java

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

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

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

    另外帖子虽然不能编辑了,但是可以 APPEND,楼主可以把需要补充的内容附加在帖子后面。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2252 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:17 · PVG 15:17 · LAX 00:17 · JFK 03:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.