среднее значение для списка матриц - PullRequest
2 голосов
/ 05 октября 2011

Это ответвление предыдущего вопроса, который начал снежный ком.Если у меня есть матрица A и я хочу использовать среднее / среднее значение каждой строки [1:], чтобы создать другую матрицу B, но сохранить заголовки строк без изменений, как мне это сделать?Я включил матрицу А, мою попытку свести воедино понимание списка и ожидаемый результат.

from operator import sum,len

# matrix A with row headings and values
A = [('Apple',0.95,0.99,0.89,0.87,0.93),
('Bear',0.33,0.25.0.85,0.44,0.33),
('Crab',0.55,0.55,0.10,0.43,0.22)]

#List Comprehension
B = [(A[0],sum,A[1:]/len,A[1:]) for A in A]

Ожидаемый результат

B = [('Apple', 0.926), ('Bear', 0.44), ('Crab', 0.37)]

Ответы [ 2 ]

5 голосов
/ 05 октября 2011

Ваше понимание списка выглядит немного странно. Вы используете одну и ту же переменную для итерируемого и элемента.

Этот подход, кажется, работает:

def average(lst):
    return sum(lst) / len(lst)

B = [(a[0], average(a[1:])) for a in A]

Я создал функцию average для удобства чтения. Он соответствует вашим ожидаемым значениям, поэтому я думаю, что вы этого хотите, хотя использование mul предполагает, что я могу что-то упустить.

1 голос
/ 05 октября 2011

Взятие у @recursive и @Steven Rumbalski:

>>> def average(lst):
...     return sum(lst) / len(lst)
... 
>>> A = {
...     'Apple': (0.95, 0.99, 0.89, 0.87, 0.93),
...     'Bear': (0.33, 0.25, 0.85, 0.44, 0.33),
...     'Crab': (0.55, 0.55, 0.10, 0.43, 0.22),
... }
>>> 
>>> B = [{key: average(values)} for key, values in A.iteritems()]
>>> B
[{'Apple': 0.92599999999999993}, {'Bear': 0.44000000000000006}, {'Crab': 0.37}]
...