numpy.quantile#

numpy.квантиль(a, q, ось=None, выход=None, overwrite_input=False, метод='linear', keepdims=False, *, веса=None)[источник]#

Вычисляет q-й квантиль данных вдоль указанной оси.

Параметры:
aarray_like из действительных чисел

Входной массив или объект, который может быть преобразован в массив.

qarray_like из float

Вероятность или последовательность вероятностей квантилей для вычисления. Значения должны быть в диапазоне от 0 до 1 включительно.

ось{int, tuple of int, None}, optional

Ось или оси, вдоль которых вычисляются квантили. По умолчанию вычисляется квантиль(и) вдоль сжатой версии массива.

выходndarray, необязательно

Альтернативный выходной массив для размещения результата. Он должен иметь ту же форму и длину буфера, что и ожидаемый вывод, но тип (вывода) будет приведен при необходимости.

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

Если True, то разрешить входной массив a для изменения промежуточными вычислениями, чтобы сэкономить память. В этом случае содержимое входного a после завершения этой функции не определён.

методstr, optional

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

  1. ‘inverted_cdf’

  2. 'averaged_inverted_cdf'

  3. ‘closest_observation’

  4. 'interpolated_inverted_cdf'

  5. 'hazen'

  6. 'weibull'

  7. 'linear' (по умолчанию)

  8. ‘median_unbiased’

  9. 'normal_unbiased'

Первые три метода являются разрывными. Для обратной совместимости с предыдущими версиями NumPy доступны следующие разрывные вариации опции по умолчанию 'linear' (7.):

  • 'lower'

  • 'higher',

  • 'midpoint'

  • ‘nearest’

Подробности см. в примечаниях.

Изменено в версии 1.22.0: Этот аргумент ранее назывался "interpolation" и предлагал только "linear" по умолчанию и последние четыре опции.

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

Если установлено значение True, оси, которые были сокращены, остаются в результате как измерения с размером один. С этой опцией результат будет корректно транслироваться на исходный массив a.

весаarray_like, необязательный

Массив весов, связанных со значениями в a. Каждое значение в a вносят вклад в квантиль в соответствии со своим связанным весом. Массив весов может быть либо одномерным (в этом случае его длина должна быть равна размеру a вдоль заданной оси) или той же формы, что и a. Если weights=None, тогда все данные в a предполагаются имеющими вес, равный единице. Только method="inverted_cdf" поддерживает веса. См. примечания для получения дополнительных сведений.

Новое в версии 2.0.0.

Возвращает:
квантильскаляр или ndarray

Если q это одиночная вероятность и axis=None, тогда результат является скаляром. Если задано несколько уровней вероятности, первая ось результата соответствует квантилям. Остальные оси — это оси, которые остаются после сокращения a. Если входные данные содержат целые числа или числа с плавающей точкой меньше float64, выходной тип данных — float64. В противном случае тип выходных данных совпадает с типом входных данных. Если выход указан, возвращается этот массив.

Смотрите также

mean
percentile

эквивалентно quantile, но с q в диапазоне [0, 100].

median

эквивалентно quantile(..., 0.5)

nanquantile

Примечания

Для заданной выборки a из базового распределения, quantile предоставляет непараметрическую оценку обратной функции распределения.

По умолчанию это делается путем интерполяции между соседними элементами в y, отсортированная копия a:

(1-g)*y[j] + g*y[j+1]

где индекс j и коэффициент g являются целой и дробной частями q * (n-1), и n extra_preargs, extra_postargs

Это частный случай Уравнения 1 из H&F [1]. В более общем случае,

  • j = (q*n + m - 1) // 1, и

  • g = (q*n + m - 1) % 1,

где m может быть определен в соответствии с несколькими различными соглашениями. Предпочтительное соглашение может быть выбрано с помощью method параметр:

method

число в H&F

m

interpolated_inverted_cdf

4

0

hazen

5

1/2

weibull

6

q

linear (по умолчанию)

7

1 - q

median_unbiased

8

q/3 + 1/3

normal_unbiased

9

q/4 + 3/8

Обратите внимание, что индексы j и j + 1 обрезаются до диапазона 0 to n - 1 когда результаты формулы выходят за пределы допустимого диапазона неотрицательных индексов. - 1 в формулах для j и g учитывает индексацию Python, начинающуюся с 0.

Таблица выше включает только оценки из H&F, которые являются непрерывными функциями вероятности q (оценщики 4-9). NumPy также предоставляет три разрывных оценщика из H&F (оценщики 1-3), где j определяется как выше, m определяется следующим образом, и g является функцией действительного значения index = q*n + m - 1 и j.

  1. inverted_cdf: m = 0 и g = int(index - j > 0)

  2. averaged_inverted_cdf: m = 0 и g = (1 + int(index - j > 0)) / 2

  3. closest_observation: m = -1/2 и g = 1 - int((index == j) & (j%2 == 1))

Для обратной совместимости с предыдущими версиями NumPy, quantile предоставляет четыре дополнительных дискретных оценщика. Как method='linear', все имеют m = 1 - q так что j = q*(n-1) // 1, но g определяется следующим образом.

  • lower: g = 0

  • midpoint: g = 0.5

  • higher: g = 1

  • nearest: g = (q*(n-1) % 1) > 0.5

Взвешенные квантили: Более формально, квантиль на уровне вероятности \(q\) кумулятивной функции распределения \(F(y)=P(Y \leq y)\) с вероятностной мерой \(P\) определяется как любое число \(x\) который удовлетворяет условия покрытия

\[P(Y < x) \leq q \quad\text{and}\quad P(Y \leq x) \geq q\]

со случайной переменной \(Y\sim P\). Выборочные квантили, результат quantile, предоставляют непараметрическую оценку соответствующих параметров генеральной совокупности, представленных неизвестной \(F\), учитывая вектор данных a длины n.

Некоторые из приведённых выше оценщиков возникают при рассмотрении \(F\) как эмпирическая функция распределения данных, т.е. \(F(y) = \frac{1}{n} \sum_i 1_{a_i \leq y}\). Затем разные методы соответствуют разным выборам \(x\) которые удовлетворяют вышеуказанным условиям покрытия. Методы, следующие этому подходу, являются inverted_cdf и averaged_inverted_cdf.

Для взвешенных квантилей условия покрытия всё ещё выполняются. Эмпирическая кумулятивная функция распределения просто заменяется её взвешенной версией, т.е. \(P(Y \leq t) = \frac{1}{\sum_i w_i} \sum_i w_i 1_{x_i \leq t}\). Только method="inverted_cdf" поддерживает веса.

Ссылки

[1] (1,2)

R. J. Hyndman и Y. Fan, «Выборочные квантили в статистических пакетах», The American Statistician, 50(4), стр. 361-365, 1996

Примеры

>>> import numpy as np
>>> a = np.array([[10, 7, 4], [3, 2, 1]])
>>> a
array([[10,  7,  4],
       [ 3,  2,  1]])
>>> np.quantile(a, 0.5)
3.5
>>> np.quantile(a, 0.5, axis=0)
array([6.5, 4.5, 2.5])
>>> np.quantile(a, 0.5, axis=1)
array([7.,  2.])
>>> np.quantile(a, 0.5, axis=1, keepdims=True)
array([[7.],
       [2.]])
>>> m = np.quantile(a, 0.5, axis=0)
>>> out = np.zeros_like(m)
>>> np.quantile(a, 0.5, axis=0, out=out)
array([6.5, 4.5, 2.5])
>>> m
array([6.5, 4.5, 2.5])
>>> b = a.copy()
>>> np.quantile(b, 0.5, axis=1, overwrite_input=True)
array([7.,  2.])
>>> assert not np.all(a == b)

Смотрите также numpy.percentile для визуализации большинства методов.