Процентилы набора данных
возвращает процентили элементов в векторе данных или массиве Y
= prctile(X
,p
)X
для процентных p
в интервале [0,100].
Если X
является вектором, тогда Y
- скаляр или вектор с той же длиной, что и количество запрашиваемых процентилей (length(p)
). Y(i)
содержит p(i)
процентиль.
Если X
является матрицей, тогда Y
- вектор-строка или матрица, где количество строк Y
равно количеству запрашиваемых процентилей (length(p)
). The i
первая строка Y
содержит p(i)
процентили каждого столбца X
.
Для многомерных массивов, prctile
действует по первой нежесткой размерности X
.
Сгенерируйте набор данных размера 10.
rng('default'); % for reproducibility x = normrnd(5,2,1,10)
x = 1×10
6.0753 8.6678 0.4823 6.7243 5.6375 2.3846 4.1328 5.6852 12.1568 10.5389
Вычислите 42-й процентиль.
Y = prctile(x,42)
Y = 5.6709
Найдите процентили всех значений в массиве.
Создайте массив 3 на 5 на 2 X
.
X = reshape(1:30,[3 5 2])
X = X(:,:,1) = 1 4 7 10 13 2 5 8 11 14 3 6 9 12 15 X(:,:,2) = 16 19 22 25 28 17 20 23 26 29 18 21 24 27 30
Найдите 40-й и 60-й процентили элементов X
.
Y = prctile(X,[40 60],'all')
Y = 2×1
12.5000
18.5000
Y(1)
- 40-й процентиль X
, и Y(2)
- 60-й процентиль X
.
Вычислите процентили между столбцами и строками матрицы данных для заданных процентов.
Сгенерируйте матрицу данных 5 на 5.
X = (1:5)'*(2:6)
X = 5×5
2 3 4 5 6
4 6 8 10 12
6 9 12 15 18
8 12 16 20 24
10 15 20 25 30
Вычислите 25-й, 50-й и 75-й процентили вдоль столбцов X
.
Y = prctile(X,[25 50 75],1)
Y = 3×5
3.5000 5.2500 7.0000 8.7500 10.5000
6.0000 9.0000 12.0000 15.0000 18.0000
8.5000 12.7500 17.0000 21.2500 25.5000
Строки Y
соответствуют процентилям столбцов X
. Для примера 25-й, 50-й и 75-й процентилей третьего столбца X
с элементами (4, 8, 12, 16, 20) 7, 12 и 17 соответственно. Y = prctile(X,[25 50 75])
возвращает ту же процентильную матрицу.
Вычислите 25-й, 50-й и 75-й процентилы вдоль строк X
.
Y = prctile(X,[25 50 75],2)
Y = 5×3
2.7500 4.0000 5.2500
5.5000 8.0000 10.5000
8.2500 12.0000 15.7500
11.0000 16.0000 21.0000
13.7500 20.0000 26.2500
Строки Y
соответствуют процентилям строк X
. Для примера 25-й, 50-й и 75-й процентилей первой строки X
с элементами (2, 3, 4, 5, 6) 2,75, 4 и 5,25 соответственно.
Найдите процентили многомерного массива одновременно по нескольким размерностям.
Создайте массив 3 на 5 на 2 X
.
X = reshape(1:30,[3 5 2])
X = X(:,:,1) = 1 4 7 10 13 2 5 8 11 14 3 6 9 12 15 X(:,:,2) = 16 19 22 25 28 17 20 23 26 29 18 21 24 27 30
Вычислите 40-й и 60-й процентили для каждой страницы X
путем определения размерностей 1 и 2 в качестве рабочих размерностей.
Ypage = prctile(X,[40 60],[1 2])
Ypage = Ypage(:,:,1) = 6.5000 9.5000 Ypage(:,:,2) = 21.5000 24.5000
Для примера, Ypage(1,1,1)
- 40-й процентиль первой страницы X
, и Ypage(2,1,1)
- 60-й процентиль первой страницы X
.
Вычислите 40-й и 60-й процентили элементов в каждой X(:,i,:)
срез путем определения размерностей 1 и 3 в качестве рабочих размерностей.
Ycol = prctile(X,[40 60],[1 3])
Ycol = 2×5
2.9000 5.9000 8.9000 11.9000 14.9000
16.1000 19.1000 22.1000 25.1000 28.1000
Для примера, Ycol(1,4)
- 40-й процентиль элементов в X(:,4,:)
, и Ycol(2,4)
- 60-й процентиль элементов в X(:,4,:)
.
Вычислите точные и приблизительные процентили высокого вектора-столбца для заданного процента.
При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Чтобы запустить пример с использованием локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, измените глобальное окружение выполнения с помощью mapreducer
функция.
mapreducer(0)
Создайте datastore для airlinesmall
набор данных. Лечите 'NA'
значения как отсутствующие данные, так что datastore
заменяет их на NaN
значения. Задайте, чтобы работать с ArrTime
переменная.
ds = datastore('airlinesmall.csv','TreatAsMissing','NA',... 'SelectedVariableNames','ArrTime');
Создайте длинную таблицу о верхнюю часть datastore и извлечите данные из длинной таблицы в tall вектора.
t = tall(ds) % Tall table
t = Mx1 tall table ArrTime _______ 735 1124 2218 1431 746 1547 1052 1134 : :
x = t{:,:} % Tall vector
x = Mx1 tall double column vector 735 1124 2218 1431 746 1547 1052 1134 : :
Вычислите точный 50-й процентиль x
. Потому что x
является высоким вектором-столбцом и p
является скаляром, prctile
возвращает точное значение процентиля по умолчанию.
p = 50; yExact = prctile(x,p)
yExact = tall double ?
Вычислите приблизительный 50-й процентиль x. Задайте 'Method','approximate'
использовать алгоритм приближения, основанный на T-Digest, для вычисления процентиля.
yApprox = prctile(x,p,'Method','approximate')
yApprox = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
Оцените длинные массивы и внесите результаты в память при помощи gather
.
[yExact,yApprox] = gather(yExact,yApprox)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 4: Completed in 1 sec - Pass 2 of 4: Completed in 0.47 sec - Pass 3 of 4: Completed in 0.67 sec - Pass 4 of 4: Completed in 0.55 sec Evaluation completed in 3.9 sec
yExact = 1522
yApprox = 1.5220e+03
Значения приблизительного процентиля и точного процентиля совпадают с четырьмя показанными цифрами.
Вычислите точные и приблизительные процентили tall matrix для заданных процентов по разным размерностям.
При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Чтобы запустить пример с использованием локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, измените глобальное окружение выполнения с помощью mapreducer
функция.
mapreducer(0)
Создайте tall matrix X
содержащий подмножество переменных из airlinesmall
набор данных. Смотрите Percentiles of Tall Vector for Given Percentile для получения дополнительной информации о шагах по извлечению данных из длинный массив.
varnames = {'ArrDelay','ArrTime','DepTime','ActualElapsedTime'}; % Subset of variables in the data set ds = datastore('airlinesmall.csv','TreatAsMissing','NA',... 'SelectedVariableNames',varnames); % Datastore t = tall(ds); % Tall table X = t{:,varnames} % Tall matrix
X = Mx4 tall double matrix 8 735 642 53 8 1124 1021 63 21 2218 2055 83 13 1431 1332 59 4 746 629 77 59 1547 1446 61 3 1052 928 84 11 1134 859 155 : : : : : : : :
При работе с размерностью, не равным 1, prctile
функция вычисляет только точные процентили, так что она может выполнить расчет эффективно с помощью основанного на сортировке алгоритма (см. Алгоритмы) вместо алгоритма приближения, основанного на T-Digest.
Вычислите точные 25-й, 50-й и 75-й процентилы X
вдоль второго измерения.
p = [25 50 75]; % Vector of percentages
Yexact = prctile(X,p,2)
Yexact = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
Когда функция действует по первой размерности и p
является вектором процентов, для вычисления процентилей необходимо использовать алгоритм приближения, основанный на t-дайджесте. Использование основанного на сортировке алгоритма для поиска процентилей по первой размерности длинный массив является вычислительно интенсивным.
Вычислите приблизительные 25-й, 50-й и 75-й процентилы X
по первой размерности. Поскольку размерность по умолчанию является 1, вам не нужно задавать значение для dim
.
Yapprox = prctile(X,p,'Method','approximate')
Yapprox = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
Оцените длинные массивы и внесите результаты в память при помощи gather
.
[Yexact,Yapprox] = gather(Yexact,Yapprox);
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 3.5 sec Evaluation completed in 4.2 sec
Показать первые пять строк точных 25-й, 50-й и 75-й процентилей по второму измерению X
.
Yexact(1:5,:)
ans = 5×3
103 ×
0.0305 0.3475 0.6885
0.0355 0.5420 1.0725
0.0520 1.0690 2.1365
0.0360 0.6955 1.3815
0.0405 0.3530 0.6875
Каждая строка матрицы Yexact
содержит три процентиля соответствующей строки в X
. Для примера, 30.5
, 347.5
, и 688.5
являются 25-м, 50-м и 75-м процентилями, соответственно, первой строки в X
.
Покажите приблизительные 25-й, 50-й и 75-й процентили X
по первой размерности.
Yapprox
Yapprox = 3×4
103 ×
-0.0070 1.1149 0.9321 0.0700
0 1.5220 1.3350 0.1020
0.0110 1.9180 1.7400 0.1510
Каждый столбец матрицы Yapprox
соответствует трем процентилям для каждого столбца матрицы X
. Для примера - первый столбец Yapprox
с элементами (-7, 0, 11) содержит процентили для первого столбца X
.
X
- Входные данныеВходные данные, заданные как вектор или массив.
Типы данных: double
| single
p
- Процентные долиПроценты, для которых можно вычислить процентилы, заданные как скаляр или вектор скаляров от 0 до 100.
Пример: 25
Пример: [25, 50, 75]
Типы данных: double
| single
dim
- РазмерностьРазмерность, по которой процентилы X
запрашиваются в виде положительного целого числа. Для примера, для матрицы X
, когда dim
= 1, prctile
возвращает процентиль (и) столбцов X
; когда dim
= 2, prctile
возвращает процентиль (ы) строк X
. Для многомерного массива X
, длина dim
I размерность Y
равно длине p
.
Типы данных: double
| single
vecdim
- Вектор размерностейВектор размерностей, заданный как положительный целочисленный вектор. Каждый элемент vecdim
представляет размерности массива входа X
. Область выхода Y
имеет длину length(p)
в наименьшей заданной рабочей размерности (то есть размерности min(vecdim)
) и имеет длину 1 в каждом из остальных рабочих размерностей. Другие длины размерности одинаковы для X
и Y
.
Например, рассмотрите массив 2 на 3 на 3 X
с p = [20 40 60 80]
. В этом случае prctile(X,p,[1 2])
возвращает массив, где каждая страница массива содержит 20-й, 40-й, 60-й и 80-й процентили элементов соответствующей страницы X
. Потому что 1 и 2 являются рабочими размерностями с min([1 2]) = 1
и length(p) = 4
, выводится массив 4 на 1 на 3.
Типы данных: single
| double
method
- Метод вычисления процентилей'exact'
(по умолчанию) | 'approximate'
Метод вычисления процентилей, заданный как 'exact'
или 'approximate'
. По умолчанию, prctile
возвращает точные процентили путем реализации алгоритма, который использует сортировку. Можно задать 'method','approximate'
для prctile
вернуть аппроксимацию процентилей путем реализации алгоритма, который использует T-Digest.
Типы данных: char
| string
Y
- ПроцентилыПроцентилы вектора данных или массива, возвращенные в виде скаляра или массива для одного или нескольких процентных значений.
Если X
является вектором, тогда Y
- скаляр или вектор с той же длиной, что и количество запрашиваемых процентилей (length(p)
). Y(i)
содержит p(i)
1й процентиль.
Если X
- массив размерности d, затем Y
- массив с длиной наименьшей рабочей размерности, равной количеству запрашиваемых процентилей (length(p)
).
Многомерный массив является массивом с более чем двумя размерностями. Для примера, если X является массивом 1 на 3 на 4, то X является трехмерный массив.
Размерность несинглтона массива является размерностью, не равной 1. Первая размерность несинглтона массива является первой размерностью, который удовлетворяет условию несинглтона. Для примера, если X
массив 1 на 1 на 2 на 4, тогда третья размерность - первая размерность неединичного предмета X
.
Линейная интерполяция использует линейные полиномы, чтобы найти yi = f (xi), значения базовой функции Y = f (X) в точках в x вектора или массива. Учитывая точки данных (x 1, y 1) и (x 2, y 2), где y 1 = f (x 1) и y 2 = f (x 2), линейная интерполяция находит y = f (x) для заданного x между x 1 и x 2 следующим образом:
Точно так же, если 100-й (1,5/ n) процентиль составляет y 1,5/ n, а 100-й (2,5/ n) процентиль - y 2,5/ n, то линейная интерполяция находит 100 (2,3/ n) -й процентиль, y 2,3/ n как:
T-digest [2] является вероятностной структурой данных, которая является разреженным представлением эмпирической кумулятивной функции распределения (CDF) набора данных. T-дайджест полезен для вычисления приближений основанной на рангах статистики (таких как процентили и квантили) из онлайновых или распределенных данных таким образом, чтобы это позволяло контролировать точность, особенно вблизи хвостов распределения данных.
Для данных, которые распределены в различных разделах, t-digest вычисляет оценки квантиля (и оценки процентиля) для каждого раздела данных отдельно, а затем объединяет оценки с сохранением постоянной памяти и постоянной относительной точности расчета ( для q-го квантиля). По этим причинам t-digest практичен для работы с длинными массивами.
Чтобы оценить квантования массива, который распределен в различных разделах, сначала создайте t-дайджест в каждом разделе данных. t-digest группирует данные в разделе и суммирует каждый кластер по центроидному значению и накопленному весу, которое представляет количество выборок, вносящих вклад в кластер. T-digest использует большие кластеры (широко разнесенные центроиды), чтобы представлять области CDF, которые близки q = 0.5
и использует небольшие кластеры (плотно расположенные центроиды), чтобы представлять области CDF, которые близки q = 0
или q = 1
.
T-digest управляет размером кластера с помощью функции масштабирования, которая сопоставляет q квантования с индексом, k с параметром сжатия . То есть,
где k отображения монотонна с минимальным значением k (0, δ) = 0 и максимальным значением k (1, δ) = δ. Следующий рисунок показывает функцию масштабирования для δ = 10.
Функция масштабирования переводит q квантования в коэффициент масштабирования k в порядок, чтобы задать шаги переменного размера в q. В результате размеры кластера неравны (больше вокруг центральных величин и меньше вблизи q = 0
или q = 1
). Меньшие кластеры обеспечивают лучшую точность вблизи ребер данных.
Чтобы обновить t-дайджест с новым наблюдением, которое имеет вес и расположение, найдите кластер, ближайший к новому наблюдению. Затем прибавьте вес и обновите центроид кластера на основе средневзвешенного среднего значения условии, что обновленный вес кластера не превышает ограничения по размеру.
Можно объединить независимые t-дайджесты из каждого раздела данных, взяв объединение t-дайджестов и объединив их центроиды. Чтобы объединить t-дайджесты, сначала отсортируйте кластеры из всех независимых t-дайджестов в порядке уменьшения весов кластеров. Затем объедините соседние кластеры, когда они удовлетворяют ограничению размера, чтобы сформировать новый t-дайджест.
Если вы формируете t-digest, который представляет полный набор данных, можно оценить конечные точки (или контуры) каждого кластера в t-digest, а затем использовать интерполяцию между конечными точками каждого кластера, чтобы найти точные оценки квантиля.
Для вектора n -element X
, prctile
возвращает процентилы с помощью основанного на сортировке алгоритма следующим образом:
Отсортированные элементы в X
приняты за 100 (0. 5/ n) -й, 100 (1. 5/ n) -й,..., 100 ([n - 0,5 ]/ n) -й процентил. Для примера:
Для вектора данных из пяти элементов, таких как {6, 3, 2, 10, 1}, отсортированные элементы {1, 2, 3, 6, 10} соответственно соответствуют 10-му, 30-му, 50-му, 70-му и 90-му процентилям.
Для вектора данных из шести элементов, таких как {6, 3, 2, 10, 8, 1}, отсортированные элементы {1, 2, 3, 6, 8, 10} соответственно соответствуют (50/6) th, (150/6) th, (250/6) th, (350/6) th и (450/6) th .
prctile
использует линейную интерполяцию для вычисления процентилей между 100 (0. 5/ n) и 100 ([n - 0,5 ]/ n).
prctile
присваивает минимальные или максимальные значения элементов в X
к процентилам, соответствующим процентам вне этой области значений.
prctile
лечит NaN
s как отсутствующие значения и удаляет их.
[1] Langford, E. «Quartiles in Elementary Statistics», Journal of Statistics Education. Том 14, № 3, 2006.
[2] Dunning, T., and O. Ertl. Вычисление чрезвычайно точных квантований с использованием T-Digests. Август 2017 года.
Указания и ограничения по применению:
Y = prctile(X,p)
возвращает точные процентили (используя основанный на сортировке алгоритм) только в том случае, если X
- высокий вектор-столбец.
Y = prctile(X,p,dim)
возвращает точные процентили только тогда, когда существует одно из следующих условий:
X
- высокий вектор-столбец.
X
является длинный массив и dim
не 1
. Для примера, prctile(X,p,2)
возвращает точные процентили вдоль строк длинный массив X
.
Если X
является длинный массив и dim
является 1
, затем необходимо указать 'Method','approximate'
использовать алгоритм приближения, основанный на T-Digest, для вычисления процентилей. Для примера, prctile(X,p,1,'Method','approximate')
возвращает приблизительные процентили вдоль столбцов длинный массив X
.
Y = prctile(X,p,vecdim)
возвращает точные процентили только тогда, когда существует одно из следующих условий:
X
- высокий вектор-столбец.
X
является длинный массив и vecdim
не включает 1
. Для примера, если X
массив 3 на 5 на 2, затем prctile(X,p,[2,3])
возвращает точные процентили элементов в каждом X(i,:,:)
срез.
X
является длинный массив и vecdim
включает 1
и все нежесткие размерности X
. Для примера, если X
- массив 10 на 1 на 4, затем prctile(X,p,[1 3])
возвращает точные процентили элементов в X(:,1,:)
.
Если X
является длинный массив и vecdim
включает 1
но не включает все нежесткие размерности X
, затем необходимо указать 'Method','approximate'
для использования алгоритма приближения. Для примера, если X
это массив 10 на 1 на 4, который можно использовать prctile(X,p,[1 2],'Method','approximate')
найти приблизительные процентили каждой страницы X
.
Для получения дополнительной информации см. Раздел «Длинные массивы»
Указания и ограничения по применению:
The 'all'
и vecdim
входные параметры не поддерживаются.
The 'Method'
аргумент пары "имя-значение" не поддерживается.
The dim
входной параметр должен быть константой времени компиляции.
Если вы не задаете dim
входной параметр, рабочий (или рабочий) размерность может быть различным в сгенерированном коде. В результате могут возникнуть ошибок времени выполнения. Для получения дополнительной информации смотрите Автоматическое ограничение размерности (MATLAB Coder).
Если выход Y
- вектор, ориентация Y
отличается от MATLAB® когда все из следующих значений true:
Вы не поставляете dim
.
X
является массивом переменного размера, а не вектором переменного размера, во время компиляции, но X
является вектором во время исполнения.
Ориентация вектора X
не соответствует ориентации вектора p
.
В этом случае выход Y
соответствует ориентации X
, а не ориентация p
.
Для получения дополнительной информации о генерации кода смотрите Введение в генерацию кода и Рабочий процесс генерации общего кода.
Указания и ограничения по применению:
The 'all'
и vecdim
входные параметры не поддерживаются.
The 'Method'
аргумент пары "имя-значение" не поддерживается.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.