数组总和和统计数据

时间:2012-12-04 08:59:00

标签: python

输入:

a[0] = [0, 1, 2]
a[1] = [0, 2, 2]
a[2] = [100, 200, 300]

输出1:

output1
>> [100, 203, 304]

输出2:

output2
>> [{0:2, 100:1}, {1:1, 2:1, 200:1}, {2:2, 300:1}]

换句话说,output1计算每列的总和,output2统计每列中每个数字的出现。

(实际上,a是4000 * 400000的矩阵) 有没有人有想法如何在Python中有效地做到这一点?

2 个答案:

答案 0 :(得分:4)

对于output1,您可以计算转置矩阵的每一行的总和:

map(sum, zip(*a))

对于output2,您可以使用collections.Counter应用于每列:

from collections import Counter
output = [Counter(col) for col in zip(*a)]

或者:

output = map(Counter, zip(*a))

答案 1 :(得分:1)

a = [[0, 1, 2], [0, 2, 2], [100, 200, 300]]
##output1
print map(sum, zip(*a))
##output2
s = []
for p in zip(*a):
    u = {}
    for e in p:
        u.setdefault(e, 0)
        u[e] += 1
    s.append(u)
print s