scipy.stats.

binned_statistic_dd#

scipy.stats.binned_statistic_dd(sample, values, статистика='mean', bins=10, range=None, expand_binnumbers=False, binned_statistic_result=None)[источник]#

Вычисление многомерной бинированной статистики для набора данных.

Это обобщение функции histogramdd. Гистограмма делит пространство на бины и возвращает количество точек в каждом бине. Эта функция позволяет вычислять сумму, среднее, медиану или другую статистику значений в каждом бине.

Параметры:
samplearray_like

Данные для гистограммы передаются как последовательность из N массивов длины D, или как массив (N,D).

values(N,) array_like или список из (N,) array_like

Данные, по которым будет вычисляться статистика. Они должны иметь ту же форму, что и sample, или список последовательностей - каждая с той же формой, что и sample. Если values является таким списком, статистика будет вычислена для каждого независимо.

статистикастрока или вызываемый объект, необязательный

Статистика для вычисления (по умолчанию 'mean'). Доступны следующие статистики:

  • ‘mean’ : вычисляет среднее значений точек в каждом бине. Пустые бины будут представлены NaN.

  • ‘median’ : вычисляет медиану значений для точек в каждом бине. Пустые бины будут представлены NaN.

  • 'count' : вычисление количества точек в каждом бине. Это идентично невзвешенной гистограмме. values массив не используется.

  • ‘sum’ : вычисляет сумму значений для точек в каждом бине. Это идентично взвешенной гистограмме.

  • ‘std’ : вычисление стандартного отклонения в каждом бине. Это неявно вычисляется с ddof=0. Если количество значений в данном бине равно 0 или 1, вычисленное значение стандартного отклонения для бина будет 0.

  • 'min' : вычисляет минимальное значение точек в каждом бине. Пустые бины будут представлены NaN.

  • ‘max’ : вычисление максимального значения для точек в каждом бине. Пустые бины будут представлены NaN.

  • функция : пользовательская функция, которая принимает 1D массив значений и выводит одну числовую статистику. Эта функция будет вызываться для значений в каждом бине. Пустые бины будут представлены как function([]) или NaN, если это возвращает ошибку.

binsпоследовательность или положительное целое, опционально

Спецификация бинов должна быть в одной из следующих форм:

  • Последовательность массивов, описывающих границы бинов по каждому измерению.

  • Количество бинов для каждого измерения (nx, ny, … = bins).

  • Количество бинов для всех измерений (nx = ny = … = bins).

rangesequence, optional

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

expand_binnumbersbool, необязательно

‘False’ (по умолчанию): возвращаемый binnumber является массивом формы (N,) линейных индексов бинов. ‘True’: возвращаемый binnumber 'разворачивается' в массив формы (D,N), где каждая строка дает номера бинов в соответствующем измерении. См. binnumber возвращаемое значение, и Примеры раздел binned_statistic_2d.

binned_statistic_resultbinnedStatisticddResult

Результат предыдущего вызова функции для повторного использования границ бинов и номеров бинов с новыми значениями и/или другой статистикой. Чтобы повторно использовать номера бинов, expand_binnumbers должно быть установлено в False (по умолчанию)

Добавлено в версии 0.17.0.

Возвращает:
статистикаndarray, форма (nx1, nx2, nx3,…)

Значения выбранной статистики в каждом двумерном бине.

bin_edgesсписок ndarrays

Список из D массивов, описывающих (nxi + 1) границ бинов для каждого измерения.

binnumber(N,) массив целых чисел или (D,N) ndarray целых чисел

Это присваивает каждому элементу sample целое число, которое представляет бинарный контейнер, в который попадает это наблюдение. Представление зависит от expand_binnumbers аргумент. См. Примечания подробности.

Примечания

Границы бинов: Все, кроме последнего (самого правого) бина, полуоткрыты в каждом измерении. Другими словами, если bins является [1, 2, 3, 4], тогда первый бинарный интервал [1, 2) (включая 1, но исключая 2) и второй [2, 3). Однако последний бинарный интервал, [3, 4], который includes 4.

binnumber: Этот возвращаемый аргумент присваивает каждому элементу sample целое число, которое представляет бинарный контейнер, к которому оно принадлежит. Представление зависит от expand_binnumbers аргумент. Если 'False' (по умолчанию): Возвращаемый binnumber является массивом формы (N,) линейных индексов, отображающих каждый элемент sample в соответствующий бинарный контейнер (используя порядок строк). Если 'True': Возвращённый binnumber является массивом формы (D,N), где каждая строка указывает размещение бинов для каждого измерения соответственно. В каждом измерении номер бина i означает, что соответствующее значение находится между (bin_edges[D][i-1], bin_edges[D][i]), для каждого измерения ‘D’.

Добавлено в версии 0.11.0.

Примеры

>>> import numpy as np
>>> from scipy import stats
>>> import matplotlib.pyplot as plt
>>> from mpl_toolkits.mplot3d import Axes3D

Возьмем массив из 600 координат (x, y) в качестве примера. binned_statistic_dd может обрабатывать массивы более высокой размерности D. Но график размерности D+1 требуется.

>>> mu = np.array([0., 1.])
>>> sigma = np.array([[1., -0.5],[-0.5, 1.5]])
>>> multinormal = stats.multivariate_normal(mu, sigma)
>>> data = multinormal.rvs(size=600, random_state=235412)
>>> data.shape
(600, 2)

Создать бины и подсчитать, сколько массивов попадает в каждый бин:

>>> N = 60
>>> x = np.linspace(-3, 3, N)
>>> y = np.linspace(-3, 4, N)
>>> ret = stats.binned_statistic_dd(data, np.arange(600), bins=[x, y],
...                                 statistic='count')
>>> bincounts = ret.statistic

Установить объем и расположение столбцов:

>>> dx = x[1] - x[0]
>>> dy = y[1] - y[0]
>>> x, y = np.meshgrid(x[:-1]+dx/2, y[:-1]+dy/2)
>>> z = 0
>>> bincounts = bincounts.ravel()
>>> x = x.ravel()
>>> y = y.ravel()
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111, projection='3d')
>>> with np.errstate(divide='ignore'):   # silence random axes3d warning
...     ax.bar3d(x, y, z, dx, dy, bincounts)

Повторное использование номеров бинов и границ бинов с новыми значениями:

>>> ret2 = stats.binned_statistic_dd(data, -np.arange(600),
...                                  binned_statistic_result=ret,
...                                  statistic='mean')
../../_images/scipy-stats-binned_statistic_dd-1.png