2012-12-04 3 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}] 
말하면

각 열의 합을 계산 출력 1 및 출력 2 통계 각 열에 각 번호가 표시됩니다.

(사실, a는 4000 * 400000의 행렬입니다.) 파이썬에서이 작업을 효율적으로 수행하는 방법에 대한 아이디어가 있습니까? 당신이 전치 행렬의 각 행에 대해 합계를 계산할 수 있습니다 출력 1에 대한

답변

4

:

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

확실한 @soulcheck 당신의 진실 –

1
각 열에 적용 collections.Counter을 사용할 수 있습니다 출력 2에 대한

map(sum, zip(*a)) 

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