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],
‘inverted_cdf’
'averaged_inverted_cdf'
‘closest_observation’
'interpolated_inverted_cdf'
'hazen'
'weibull'
'linear' (по умолчанию)
‘median_unbiased’
'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. В противном случае тип выходных данных совпадает с типом входных данных. Если выход указан, возвращается этот массив.
Смотрите также
meanpercentileэквивалентно 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), иnextra_preargs, extra_postargsЭто частный случай Уравнения 1 из H&F [1]. В более общем случае,
j = (q*n + m - 1) // 1, иg = (q*n + m - 1) % 1,
где
mможет быть определен в соответствии с несколькими различными соглашениями. Предпочтительное соглашение может быть выбрано с помощьюmethodпараметр:methodчисло в H&F
minterpolated_inverted_cdf4
0hazen5
1/2weibull6
qlinear(по умолчанию)7
1 - qmedian_unbiased8
q/3 + 1/3normal_unbiased9
q/4 + 3/8Обратите внимание, что индексы
jиj + 1обрезаются до диапазона0ton - 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.inverted_cdf:m = 0иg = int(index - j > 0)averaged_inverted_cdf:m = 0иg = (1 + int(index - j > 0)) / 2closest_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 = 0midpoint:g = 0.5higher:g = 1nearest: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"поддерживает веса.Ссылки
Примеры
>>> 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для визуализации большинства методов.