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 に答える