Spec-Zone.ru › NumPy 2.0

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]:

  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: Этот аргумент ранее назывался «интерполяция» и предлагал только по умолчанию «линейный» и последние четыре варианта.

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, возвращается этот массив.

См. также

mean
percentile

эквивалентно 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" поддерживает веса.

Ссылки

[1] (1,2,3,4,5,6,7,8,9,10)

R. J. Hyndman и Y. Fan, “Образцы квантилей в статистических пакетах”, The American Statistician, 50(4), стр. 361-365, 1996

Примеры

>>> 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API