2012-12-04 76 views
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計算每一列的總和,並輸出2統計每列出現每個數字。

(實際上,a是4000 * 400000的矩陣) 有沒有人有想法如何在Python中有效地做到這一點?

回答

4

爲輸出1就可以計算出總和轉置矩陣中的每一行:

map(sum, zip(*a)) 

爲輸出2,您可以使用collections.Counter應用於每一列:

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

或者:

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

+1你可以用m ap在第二種情況下也是如此:'map(Counter,zip(* a))' – soulcheck

+0

Sure @soulcheck your truth –

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