Поиск списка отклонений списков python - PullRequest
1 голос
/ 18 марта 2020

Я новичок в python, и мне нужна помощь в поиске среднего и отклонений в списке списков. У меня есть список списков, подобных этому:

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9],
        [10, 11, 12]]

, и я хочу найти вывод отклонений, как это:

[var_column_1, var_column_2, var_column_3, var_column_4]

Я могу найти среднее, но для отклонений, У меня нет удачи в поиске решения. Вот мой код:

def avg(allgroups):
    return [float(sum(i))/len(i) for i in zip(*allgroups)]
def variance(allgroups):
    summm = 0.0
    for i in zip(*allgroups):
        summm = summm + (i-avg(allgroups))**2
    return summm / (len(allgroups)-1)
    TheAvg=avg(allgroups)
    print(TheAvg)
    Variance=variance(allgroups)
    print(Variance)

Я получаю сообщение об ошибке на экране:

*summm = summm + (i-avg(allgroups))**2
TypeError: unsupported operand type(s) for -: 'tuple' and 'list'*

Буду благодарен за любую помощь. P / S: я не могу использовать numpy для этой проблемы.

Ответы [ 3 ]

1 голос
/ 18 марта 2020

Вы можете просто использовать встроенную библиотеку statistics ( документация ).

import statistics

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

def avg(all_groups):
    return [statistics.mean(i) for i in zip(*all_groups)]

def variance(all_groups):
    return [statistics.variance(i) for i in zip(*all_groups)]

print(avg(data))
print(variance(data))
1 голос
/ 18 марта 2020

Подход с одним вкладышем без импорта статистики:

def variance(allgroups):
    return [sum((x - sum(group) / len(group)) ** 2 for x in group) / (len(group) - 1) for group in zip(*allgroups)]
1 голос
/ 18 марта 2020

Вам не нужно изобретать велосипед - statistics.variance может сделать тяжелую работу за вас:

import statistics

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
variances = [statistics.variance(l) for l in zip(*data)]
...