0

输入:

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 中有效地做到这一点?

4

2 回答 2

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))
于 2012-12-04T09:01:58.370 回答
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
于 2012-12-04T09:07:12.870 回答