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
guolingbing
V2EX  ›  Python

求解答,还是 numpy 和 pandas

  •  
  •   guolingbing · 2017-05-22 15:10:28 +08:00 · 2273 次点击
    这是一个创建于 2747 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在我有一列不等长数组:

    
    
    a = [[1,0,1,0],
         [1,0,1],
         [1,0,1,1,1],
            ...
        ]
    
    

    我该怎样才能对这个数组求和呢?得到这样的序列[2,2,4...]?

    求各位大佬赐教!感激不尽

    9 条回复    2017-05-24 20:18:12 +08:00
    imn1
        1
    imn1  
       2017-05-22 15:24:47 +08:00
    [sum(x) for x in a]
    guolingbing
        2
    guolingbing  
    OP
       2017-05-22 15:30:18 +08:00
    @imn1 这样太慢了
    guolingbing
        3
    guolingbing  
    OP
       2017-05-22 15:32:25 +08:00
    谢谢各位,我已经找到方法了 233:
    把数组 flat 以后,用 np.add.reduceat()方法
    imn1
        4
    imn1  
       2017-05-22 15:45:11 +08:00
    df.sum(axis=1)
    zhusimaji
        5
    zhusimaji  
       2017-05-22 21:56:16 +08:00   ❤️ 1
    import pandas as pd

    In [3]:

    b
    a = [[1,0,1,0],
    [1,0,1],
    [1,0,1,1,1]
    ]
    b=pd.DataFrame(a)
    print b.sum(axis=1)
    0 2.0
    1 2.0
    2 4.0
    dtype: float64
    amoia50
        6
    amoia50  
       2017-05-23 16:56:49 +08:00
    np.sum(a, axis=1)
    guolingbing
        7
    guolingbing  
    OP
       2017-05-24 09:44:30 +08:00
    @zhusimaji 这个 work ,但是速度比较慢,还要解决 na 值
    guolingbing
        8
    guolingbing  
    OP
       2017-05-24 09:44:53 +08:00
    @amoia50 这个根本不会 work
    ruoyu0088
        9
    ruoyu0088  
       2017-05-24 20:18:12 +08:00
    如果你的数据是一个嵌套列表,那么 list(map(sum, data))最快,如果你的数据是数组列表,那么[row.sum() for row in data]最快。至于是嵌套列表好还是数组列表好,要看每条数据的平均长度,数据越长,使用 numpy 数组越快。我猜你的数据是数组列表,你可以比较一下[row.sum() for row in data]和你的 flat 数组的方法,应该是我这个更快。因为将所有这些数组拼在一起就很浪费时间。

    https://gist.github.com/ruoyu0088/83eeb57dfe5cb8fe62db91d88fe34598
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:17 · PVG 18:17 · LAX 02:17 · JFK 05:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.