输入:
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中有效地做到这一点?
答案 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