Nano Hash - криптовалюты, майнинг, программирование

вычислить среднее значение каждого подсписка отдельно внутри списка списков

Я действительно новичок в Python, и я пытаюсь найти среднее значение списка списков. У меня есть список списков чисел с плавающей запятой, которые указывают оценки курсов за семестр, и выглядит так:

 mylist =  [[[2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0]], [[2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0]]]

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

myaverage= [[[2.335],[2.335],[2.335],...]]]

Это не те же числа, что и в той части списка, которую я вам показываю. Я пытался сделать это:

for s in mylist:  # for each list
        gpa = sum(s) / len(s)
        allGPA.append(gpa)
        for x in s:  # for each sublist
            x_ = x if type(x) is list else [x]
            myaverage.append(sum(x_) / float(len(x_)))

но я получаю эту ошибку:

gpa = sum(s) / len(s) TypeError: неподдерживаемый тип(ы) операнда для +: 'int' и 'list'

Я не могу понять, является ли мой подход совершенно неправильным или я неправильно перебираю список.

14.05.2020

  • придирка: вместо if type(x) is list используйте if isinstance(x, list) 14.05.2020
  • mylist — это список списков списков, поэтому вам нужен дополнительный цикл. Или замените все на np.array(mylist).mean(axis=-1) 14.05.2020
  • у вас есть 2 уровня подсписков. вы могли ожидать print ([[sum(i)/len(i) for i in l] for l in mylist]) 14.05.2020
  • @Marat, это дает мне ошибку из _method.py в _mean: ret = ret / rcount, а затем еще раз: TypeError: неподдерживаемый тип (ы) операнда для /: 'list' и 'int' 14.05.2020
  • @piggy, я обновил свой ответ, и он соответствует вашим ожиданиям. Пожалуйста, посмотрите. 16.05.2020

Ответы:


1

Попробуйте это:

from statistics import mean

avg = [[ mean(sub_list) for sub_list in list ] for list in mylist]

Если синтаксис выглядит немного запутанным, взгляните на списковые включения

14.05.2020

2

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

Функция

from collections import defaultdict

def return_averages(gpa_lists):
    """ Takes in a list of lists and returns a dictionary of averages.
     the key will be the level of each sublist."""
    gpa_dict = {number_of_list : outer_list for number_of_list, outer_list in enumerate(gpa_lists)}

    gpa_averages = defaultdict(list)
    
    for list_number,lists in gpa_dict.items():
        for each_list in lists:
            gpa_averages[list_number].append(sum(each_list) / len(each_list))
        
    return gpa_averages
   

Использование.

return_averages(mylist)


defaultdict(list,
            {0: [2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335],
             1: [2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335]})
14.05.2020

3

Проверьте это, я обновил свой ответ, вывод такой, какой вы хотите. **Вывод**

allGPA = []
myaverage = mylist
c = 0
count = 0
gpa = [0]
for list in mylist:
    for i in range(len(list)):
        gpa[0] = sum(mylist[c][i]) / len(mylist[c][i])
        allGPA.append(gpa)
        myaverage[c][i] = gpa
        print(myaverage[c][i])

    c = c + 1
print(myaverage)
14.05.2020
  • Спасибо за ваш ответ! Это дает мне в результате список, а не список с подсписками, как мне нужно. 14.05.2020
  • Нет проблем @piggy 14.05.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..