numpy.quantile
- numpy.quantile(a, q, axis=None, out=None, overwrite_input=False, method='linear', keepdims=False, *, weights=None, interpolation=None)[source]
-
Вычисление q-го процентиля данных по указанной оси.
Введено в версии 1.15.0.
- Параметры:
-
- aarray_like вещественных чисел
-
Вводной массив или объект, который может быть преобразован в массив.
- qarray_like float
-
Вероятность или последовательность вероятностей для вычисления процентилей. Значения должны быть включительно от 0 до 1.
- axis{int, кортеж из целых чисел, None}, необязательно
-
Ось или оси, по которым вычисляются процентили. По умолчанию вычисляется процентиль(и) по сплющенной версии массива.
- outndarray, необязательно
-
Альтернативный выходной массив, в котором следует разместить результат. Он должен иметь такую же форму и длину буфера, как ожидаемый результат, но тип (результата) будет преобразован, если это необходимо.
- overwrite_inputbool, необязательно
-
Если True, то разрешается изменять входной массив
aпромежуточными вычислениями для экономии памяти. В этом случае содержимое входного массиваaпосле завершения этой функции не определено. - methodstr, необязательно
-
Этот параметр определяет метод оценки процентиля. Существует много различных методов, некоторые уникальны для NumPy. Объяснение см. в примечаниях. Доступные варианты, отсортированные по их типу R, как указано в статье H&F [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: Этот аргумент ранее назывался «интерполяция» и предлагал только по умолчанию «линейный» и последние четыре варианта.
- keepdimsbool, необязательно
-
Если установлено в True, оси, которые были уменьшены, остаются в результате как измерения с размером один. С этим параметром результат будет правильно транслироваться к исходному массиву
a. - weightsarray_like, необязательно
-
Массив весов, связанных со значениями в
a. Каждое значение вaвносит вклад в процентиль в соответствии со своим связанным весом. Массив весов может быть одномерным (в этом случае его длина должна быть размеромaвдоль заданной оси) или иметь такую же форму, какa. Еслиweights=None, тогда предполагается, что все данные вaимеют вес, равный единице. Толькоmethod=”inverted_cdf”поддерживает веса. Подробности см. в примечаниях.Введено в версии 2.0.0.
- interpolationstr, необязательно
-
Устаревшее имя для ключевого аргумента method.
Устарело начиная с версии 1.22.0.
- Возвращает:
-
- quantileскаляр или ndarray
-
Если
q— единственная вероятность иaxis=None, то результат — скаляр. Если задано несколько уровней вероятности, первая ось результата соответствует процентилям. Другие оси — это оси, оставшиеся после уменьшенияa. Если вход содержит целые числа или числа с плавающей точкой, меньшиеfloat64, тип данных выходных данных —float64. В противном случае тип данных результата такой же, как у входных данных. Если заданout, возвращается этот массив.
См. также
meanpercentile-
эквивалентно quantile, но q в диапазоне [0, 100].
median-
эквивалентно
quantile(..., 0.5) nanquantile
Примечания
В общем случае процентиль на уровне вероятности \(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.Более общий способ определения оценок процентилей выборки следующий. Эмпирический q-процентиль
a— этоn * q-е значение от минимума до максимума в отсортированной копииa. Значения и расстояния двух ближайших соседей, а также параметрmethodопределят процентиль, если нормированный ранг не совпадает с местоположениемn * qточно. Эта функция эквивалентна медиане, еслиq=0.5, минимуму, еслиq=0.0, и максимуму, еслиq=1.0.Необязательный параметр
methodопределяет метод, используемый, когда желаемый процентиль находится между двумя индексамиiиj = i + 1. В этом случае мы сначала определяемi + g, виртуальный индекс, который находится междуiиj, гдеi— целая часть, аg— дробная часть индекса. Конечный результат — интерполяцияa[i]иa[j]на основеg. Во время вычисленияg,iиjизменяются с помощью постоянных поправокalphaиbeta, выбор которых зависит от используемогоmethod. Наконец, обратите внимание, что поскольку Python использует нумерацию с 0, код вычитает еще 1 из индекса внутри.Следующая формула определяет виртуальный индекс
i + g, местоположение процентиля в отсортированной выборке:\[i + g = q * ( n - alpha - beta + 1 ) + alpha\]Затем различные методы работают следующим образом
- inverted_cdf:
-
метод 1 из H&F [1]. Этот метод даёт разрывные результаты:
- если g > 0; то взять j
- если g = 0; то взять i
- averaged_inverted_cdf:
-
метод 2 из H&F [1]. Этот метод даёт разрывные результаты:
- если g > 0; то взять j
- если g = 0; то усреднить между границами
- closest_observation:
-
метод 3 из H&F [1]. Этот метод даёт разрывные результаты:
- если g > 0; то взять j
- если g = 0 и индекс нечётный; то взять j
- если g = 0 и индекс чётный; то взять i
- interpolated_inverted_cdf:
-
метод 4 из H&F [1]. Этот метод даёт непрерывные результаты, используя:
- alpha = 0
- beta = 1
- hazen:
-
метод 5 из H&F [1]. Этот метод даёт непрерывные результаты, используя:
- alpha = 1/2
- beta = 1/2
- weibull:
-
метод 6 из H&F [1]. Этот метод даёт непрерывные результаты, используя:
- alpha = 0
- beta = 0
- linear:
-
метод 7 из H&F [1]. Этот метод даёт непрерывные результаты, используя:
- alpha = 1
- beta = 1
- median_unbiased:
-
метод 8 из H&F [1]. Этот метод, вероятно, является лучшим, если функция распределения выборки неизвестна (см. ссылку). Этот метод даёт непрерывные результаты, используя:
- alpha = 1/3
- beta = 1/3
- normal_unbiased:
-
метод 9 из H&F [1]. Этот метод, вероятно, является лучшим, если известно, что функция распределения выборки нормальная. Этот метод даёт непрерывные результаты, используя:
- alpha = 3/8
- beta = 3/8
- lower:
-
Метод NumPy, сохранённый для обратной совместимости. Принимает
iв качестве точки интерполяции. - higher:
-
Метод NumPy, сохранённый для обратной совместимости. Принимает
jв качестве точки интерполяции. - nearest:
-
Метод NumPy, сохранённый для обратной совместимости. Принимает
iилиj, какой из них ближе. - midpoint:
-
Метод NumPy, сохранённый для обратной совместимости. Использует
(i + j) / 2.
Взвешенные квантили: Для взвешенных квантилей вышеуказанные условия покрытия по-прежнему выполняются. Эмпирическая кумулятивная функция распределения просто заменяется её взвешенной версией, т.е. \(P(Y \leq t) = \frac{1}{\sum_i w_i} \sum_i w_i 1_{x_i \leq t}\). Только
method="inverted_cdf"поддерживает веса.Ссылки
Примеры
>>> 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для визуализации большинства методов.
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.quantile.html