Среднее число в Python: способы вычисления

Раздел: Математика -> Математические операции

Вычисление среднего числа в Python

Среднее арифметическое (mean) - одна из базовых статистических метрик. В Python существует несколько путей его получения, от простого sum() / len() до использования специализированных библиотек. Ниже разобраны основные варианты с пояснениями и типичными проблемами.

Как получить среднее значение с помощью модуля statistics?

Стандартная библиотека Python включает модуль statistics, в котором есть функция mean(). Это рекомендуемый способ для большинства случаев, так как он обрабатывает числа с плавающей точкой корректно и понятен.


import statistics

data = [10, 20, 30, 40, 50]
average = statistics.mean(data)
print(average)
  

Python среднее число (вычисление среднего числа в python)

30
  

Abs x python (функция abs() в python)

Функция принимает итерируемый объект с числами. Для пустого списка выбрасывается StatisticsError.

Проблема: передача пустой последовательности вызывает исключение. Решение - предварительная проверка длины.


if data:
    print(statistics.mean(data))
else:
    print("Список пуст")
    

Python найти максимальное значение (поиск максимального значения в python)

Как вычислить среднее вручную, без импорта библиотек?

Классический метод - сумма элементов, делённая на их количество. Подходит для простых задач, где не нужна дополнительная обработка.


data = [15, 25, 35]
average = sum(data) / len(data)
print(average)
  

числа словами python (преобразование чисел в слова в python)

25.0
  

округление python round (округление чисел в python (round))

Ошибка деления на ноль: если список пуст, len(data) == 0 вызывает ZeroDivisionError. Нужна защита.


if len(data) > 0:
    average = sum(data) / len(data)
else:
    average = 0
    

Как использовать NumPy для среднего?

Библиотека numpy предоставляет быструю функцию mean(), особенно эффективную на больших массивах. Она поддерживает многомерные массивы и ось (axis).


import numpy as np

data = [1.5, 2.5, 3.5]
average = np.mean(data)
print(average)
  
2.5
  

Для двумерного массива можно вычислить среднее по строкам или столбцам.

Проблема: если данные содержат NaN, результат тоже будет NaN. Решение - np.nanmean(), игнорирующее пропуски.


import numpy as np
data = [1.0, np.nan, 3.0]
print(np.nanmean(data))
    
2.0
    

Как посчитать среднее с помощью reduce и lambda?

Функциональный подход с functools.reduce - альтернативный способ, демонстрирующий мощь свёртки. Может быть полезен в учебных целях или в коде, где уже используется функциональный стиль.


from functools import reduce

data = [10, 20, 30]
average = reduce(lambda x, y: x + y, data) / len(data)
print(average)
  
20.0
  

Важно: reduce не обрабатывает пустой список, потребуется проверка.

Проблема: reduce на пустой последовательности вызовет TypeError. Рекомендуется использовать с проверкой.

Как быть, если данные - целые числа и нужен целочисленный результат?

Иногда требуется округление или целая часть среднего. В таких случаях можно применить целочисленное деление (//) или округление.


data = [1, 2, 3, 4]
average_int = sum(data) // len(data)
print(average_int)
  
2
  

Однако такое отбрасывание дробной части может исказить результат. Лучше использовать round() или math.floor() / math.ceil() после вычисления.

Проблема: целочисленное деление всегда округляет вниз (для положительных чисел). Для отрицательных чисел поведение отличается. Используйте int(round(...)) для стандартного округления.

Выбор метода зависит от контекста: для быстрого прототипа подойдёт statistics.mean(), для работы с большими данными - numpy, для обучения - ручное вычисление. Всегда учитывайте обработку пустых списков и тип данных.

Расширенные примеры вычисления среднего

Среднее с игнорированием пропущенных значений (NaN)

Использование numpy.nanmean для списка с пропусками.

Пример

import numpy as np

data = [1.0, np.nan, 3.0, np.nan, 5.0]
average = np.nanmean(data)
print(average)
  
3.0
  

Пояснение: функция автоматически исключает NaN из расчёта, количество учитываемых элементов равно числу не-NaN значений.

Взвешенное среднее

Когда элементы имеют разный вес, используется взвешенное среднее: сумма произведений значений на веса, делённая на сумму весов.

Пример

values = [70, 80, 90]
weights = [1, 2, 3]
weighted_avg = sum(v * w for v, w in zip(values, weights)) / sum(weights)
print(weighted_avg)
  
83.33333333333333
  

Подходит для ситуаций, где важность данных неодинакова (например, оценки по разным предметам).

Скользящее среднее (moving average)

Среднее по окну данных, часто используется для сглаживания временных рядов. Реализация с помощью цикла.

Пример

def moving_average(data, window_size):
    result = []
    for i in range(len(data) - window_size + 1):
        window = data[i:i+window_size]
        result.append(sum(window) / window_size)
    return result

data = [1, 2, 3, 4, 5, 6]
print(moving_average(data, 3))
  
[2.0, 3.0, 4.0, 5.0]
  

Первый элемент результата - среднее первых трёх элементов: (1+2+3)/3 = 2.0.

Среднее по каждому столбцу двумерного списка

Использование numpy.mean с параметром axis.

Пример

import numpy as np

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr = np.array(matrix)
col_means = np.mean(arr, axis=0)
row_means = np.mean(arr, axis=1)
print("Средние по столбцам:", col_means)
print("Средние по строкам:", row_means)
  
Средние по столбцам: [4. 5. 6.]
Средние по строкам: [2. 5. 8.]
  

Пояснение: axis=0 - усреднение по вертикали (вдоль строк), axis=1 - по горизонтали (вдоль столбцов).

Среднее с использованием pandas

Библиотека pandas даёт метод mean() для Series и DataFrame.

Пример

import pandas as pd

s = pd.Series([10, 20, 30, 40])
df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]})
print("Среднее Series:", s.mean())
print("Среднее DataFrame по столбцам:\n", df.mean())
  
Среднее Series: 25.0
Среднее DataFrame по столбцам:
 A    2.0
B    5.0
dtype: float64
  

Pandas автоматически исключает NaN по умолчанию (параметр skipna=True).

Среднее гармоническое (harmony mean) из statistics

Для данных, где важен обратный масштаб, например скорости.

Пример

import statistics

data = [10, 20, 30]
harmonic_mean = statistics.harmonic_mean(data)
print(harmonic_mean)
  
16.363636363636363
  

Формула: n / (1/x1 + 1/x2 + ... + 1/xn). Не допускает нулевых значений.

Среднее с округлением до заданной точности

Использование round() после вычисления.

Пример

data = [2.345, 3.678, 1.234]
average = sum(data) / len(data)
rounded = round(average, 2)
print(rounded)
  
2.42
  

Округление до двух знаков. Обратите внимание, что round() использует банковское округление (к чётному) в Python 3.

Среднее для списка строковых чисел

Если числа представлены строками, нужно преобразование типов.

Пример

string_numbers = ['10.5', '20.3', '30.8']
values = [float(x) for x in string_numbers]
average = sum(values) / len(values)
print(average)
  
20.533333333333335
  

Пояснение: генератор списка конвертирует строки в float, затем вычисляется среднее.

Среднее с использованием Decimal для высокой точности

Для финансовых расчётов, где важна точность десятичных дробей.

Пример

from decimal import Decimal, getcontext
getcontext().prec = 10

data = [Decimal('0.1'), Decimal('0.2'), Decimal('0.3')]
average = sum(data) / Decimal(len(data))
print(average)
  
0.2
  

Decimal избегает ошибок округления, свойственных float.

Среднее в одну строку с помощью map и sum

Краткая запись без явного цикла.

Пример

data = [1, 2, 3, 4, 5]
average = sum(data) / len(data) if data else 0
print(average)
  
3.0
  

Тернарный оператор гарантирует защиту от пустого списка.

Вычисление среднего числа в Python - comments

En
Python среднее число (python)