2012-01-11 2 views
0

У меня есть массив, который выглядит примерно так:Карта-суммируя элементы в многомерный массив

[ (0.5, 0.6, 0.7), (0.1, 0.9, 0.8), (0.9, 1.0, 0.4), 
    ... 
    (0.3, 0.8, 0.3), (0.2, 0.4, 0.9), (0.5, 0.5, 0.3) ] 

Что мне нужно, это сумма [0] [0], [0] [1], [ 0] [2] и т. Д., А также [1] [0], [1] [1], [1] [2] и т. Д. Мне нужен способ получить сумму первого индекса всех элементов в массив, затем сумму второго индекса всех элементов в массиве и т. д.

Как это сделать в Python? Конечным результатом было бы наличие одного кортежа, содержащего среднее значение каждого индекса всех кортежей.

ответ

1
>>> c=[ (0.5, 0.6, 0.7), (0.1, 0.9, 0.8), (0.9, 1.0, 0.4),(0.5, 0.6, 0.7), (0.1, 0.9, 0.8), (0.9, 1.0, 0.4),(0.5, 0.6, 0.7), (0.1, 0.9, 0.8), (0.9, 1.0, 0.4)] 
>>> [ sum([t[i] for t in c]) for i in range(len(c[0]))] 
[4.5, 7.5, 5.6999999999999993] 

Это предполагает, что все кортежи имеют много элементов, как ваш первый кортеж

+0

Nice :) Это сработало отлично. Извините, я сбился с толку и не мог думать об этом сам: P –

1

Это должно сделать для произвольных кортежей размера:

result = reduce(lambda x, y: tuple((xi + yi) for (xi, yi) in zip (x, y)), l) 

с l быть список кортежей. Конечно, это только суммирует все, не вычисляет среднее.

Любая причина, по которой вы не делаете этого с NumPy. Это упростит (и ускорит) вещи.

+0

+1 для 'zip', тогда это хорошо для кортежей любой длины, если они совпадают. – Hoons

0

питон 2.6.x

>>> reduce(lambda x, y: (x[0]+y[0], x[1]+y[1], x[2]+y[2]), [(1, 2, 3), (2, 3, 4), (4, 5, 6)]) 
(7, 10, 13) 
0

Попробуйте следующее:

values = [(1,2,3), (4,5,6)] 
print map(sum, values) 
Смежные вопросы