求解答,还是 numpy 和 pandas

2017-05-22 15:10:28 +08:00
 guolingbing

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



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

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

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

2267 次点击
所在节点    Python
9 条回复
imn1
2017-05-22 15:24:47 +08:00
[sum(x) for x in a]
guolingbing
2017-05-22 15:30:18 +08:00
@imn1 这样太慢了
guolingbing
2017-05-22 15:32:25 +08:00
谢谢各位,我已经找到方法了 233:
把数组 flat 以后,用 np.add.reduceat()方法
imn1
2017-05-22 15:45:11 +08:00
df.sum(axis=1)
zhusimaji
2017-05-22 21:56:16 +08:00
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
2017-05-23 16:56:49 +08:00
np.sum(a, axis=1)
guolingbing
2017-05-24 09:44:30 +08:00
@zhusimaji 这个 work ,但是速度比较慢,还要解决 na 值
guolingbing
2017-05-24 09:44:53 +08:00
@amoia50 这个根本不会 work
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

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

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

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

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

© 2021 V2EX