现在我有一列不等长数组:
a = [[1,0,1,0],
[1,0,1],
[1,0,1,1,1],
...
]
我该怎样才能对这个数组求和呢?得到这样的序列[2,2,4...]?
求各位大佬赐教!感激不尽
1
imn1 2017-05-22 15:24:47 +08:00
[sum(x) for x in a]
|
2
guolingbing OP @imn1 这样太慢了
|
3
guolingbing OP 谢谢各位,我已经找到方法了 233:
把数组 flat 以后,用 np.add.reduceat()方法 |
4
imn1 2017-05-22 15:45:11 +08:00
df.sum(axis=1)
|
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 |
6
amoia50 2017-05-23 16:56:49 +08:00
np.sum(a, axis=1)
|
7
guolingbing OP @zhusimaji 这个 work ,但是速度比较慢,还要解决 na 值
|
8
guolingbing OP @amoia50 这个根本不会 work
|
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 |