discretize

Сгруппировать данные в интервалы или категории

Описание

пример

Y = discretize(X,edges) возвращает индексы интервалов, которые содержат элементы X. The jth bin содержит элемент X(i) если edges(j) <= X(i) < edges(j+1) для 1 <= j < N, где N количество интервалов и length(edges) = N+1. Последний интервал содержит обоих ребер, такие что edges(N) <= X(i) <= edges(N+1).

пример

[Y,E] = discretize(X,N) разделяет данные на X в N интервалы равномерной ширины, а также возвращает границы интервала E.

пример

[Y,E] = discretize(X,dur), где X является массивом datetime или длительностью, делит X в равномерные интервалы dur интервал времени. dur может быть скаляр duration или calendarDurationили модуль времени. Для примера, [Y,E] = discretize(X,'hour') делит X в интервалы с равномерной длительности в 1 часа.

пример

[___] = discretize(___,values) возвращает соответствующий элемент в values вместо номера интервала, используя любую из предыдущих комбинаций входных или выходных аргументов. Для примера, если X(1) находится в интервале 5, затем Y(1) является values(5) а не 5. values должен быть вектором с длиной, равной количеству интервалов.

пример

[___] = discretize(___,'categorical') создает категориальный массив, где каждый интервал является категорией. В большинстве случаев имена категорий по умолчанию имеют форму "[A,B)«(или» [A,B]"для последнего интервала), где A и B являются последовательными границами интервала. Если вы задаете dur как векторы символов, имена категорий по умолчанию могут иметь специальные форматы. См. Y для получения списка форматов отображения.

пример

[___] = discretize(___,'categorical',displayFormat)для входов массива datetime или duration использует заданный формат отображения datetime или duration в именах категорий выхода.

пример

[___] = discretize(___,'categorical',categoryNames) также называет категории в Y использование массива ячеек из векторов символов, categoryNames. Длина categoryNames должно быть равно количеству интервалов.

пример

[___] = discretize(___,'IncludedEdge',side), где side является 'left' или 'right', определяет, включает ли каждый интервал правую или левую границу интервала. Для примера, если side является 'right'затем каждое интервал включает правую границу интервала, за исключением первого интервала, который включает обоих ребер. В этом случае jth bin содержит элемент X(i) если edges(j) < X(i) <= edges(j+1), где 1 < j <= N и N количество интервалов. Первый интервал включает левый край, таким образом, что он содержит edges(1) <= X(i) <= edges(2). Значение по умолчанию для side является 'left'.

Примеры

свернуть все

Использование discretize для группирования числовых значений в дискретные интервалы. edges задает пять границы интервала, поэтому существует четыре интервала.

data = [1 1 2 3 6 5 8 10 4 4]
data = 1×10

     1     1     2     3     6     5     8    10     4     4

edges = 2:2:10
edges = 1×5

     2     4     6     8    10

Y = discretize(data,edges)
Y = 1×10

   NaN   NaN     1     1     3     2     4     4     2     2

Y указывает, к какому интервалу принадлежит каждый элемент данных. Поскольку значение 1 выпадает за пределы области значений интервалов, Y содержит NaN значения для этих элементов.

Сгруппировать случайные данные в три интервала. Задайте второй выход, чтобы вернуть границы интервала, вычисленные как discretize.

X = randn(10,1);
[Y,E] = discretize(X,3)
Y = 10×1

     2
     2
     1
     2
     2
     1
     1
     2
     3
     2

E = 1×4

    -3     0     3     6

Создайте вектор datetime 10 на 1 со случайными датами в 2016 году. Затем сгруппируйте значения datetime по месяцам и верните результат как категориальный массив.

X = datetime(2016,1,randi(365,10,1))
X = 10x1 datetime
   24-Oct-2016
   26-Nov-2016
   16-Feb-2016
   29-Nov-2016
   18-Aug-2016
   05-Feb-2016
   11-Apr-2016
   18-Jul-2016
   15-Dec-2016
   18-Dec-2016

Y = discretize(X,'month','categorical')
Y = 10x1 categorical
     Oct-2016 
     Nov-2016 
     Feb-2016 
     Nov-2016 
     Aug-2016 
     Feb-2016 
     Apr-2016 
     Jul-2016 
     Dec-2016 
     Dec-2016 

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

Сгруппируйте некоторые случайные значения длительности по часам и верните результаты как категориальный массив.

X = hours(abs(randn(1,10)))'
X = 10x1 duration
   0.53767 hr
    1.8339 hr
    2.2588 hr
   0.86217 hr
   0.31877 hr
    1.3077 hr
   0.43359 hr
   0.34262 hr
    3.5784 hr
    2.7694 hr

Y = discretize(X,'hour','categorical')
Y = 10x1 categorical
     [0 hr, 1 hr) 
     [1 hr, 2 hr) 
     [2 hr, 3 hr) 
     [0 hr, 1 hr) 
     [0 hr, 1 hr) 
     [1 hr, 2 hr) 
     [0 hr, 1 hr) 
     [0 hr, 1 hr) 
     [3 hr, 4 hr] 
     [2 hr, 3 hr) 

Измените отображение результатов на количество минут.

Y = discretize(X,'hour','categorical','m')
Y = 10x1 categorical
     [0 min, 60 min) 
     [60 min, 120 min) 
     [120 min, 180 min) 
     [0 min, 60 min) 
     [0 min, 60 min) 
     [60 min, 120 min) 
     [0 min, 60 min) 
     [0 min, 60 min) 
     [180 min, 240 min] 
     [120 min, 180 min) 

Измените формат снова, чтобы отобразить как количество часов, минут и секунд.

Y = discretize(X,'hour','categorical','hh:mm:ss')
Y = 10x1 categorical
     [00:00:00, 01:00:00) 
     [01:00:00, 02:00:00) 
     [02:00:00, 03:00:00) 
     [00:00:00, 01:00:00) 
     [00:00:00, 01:00:00) 
     [01:00:00, 02:00:00) 
     [00:00:00, 01:00:00) 
     [00:00:00, 01:00:00) 
     [03:00:00, 04:00:00] 
     [02:00:00, 03:00:00) 

Используйте правое ребро каждого интервала в качестве values вход. Значения элементов в каждом интервале всегда меньше, чем значение интервала.

X = randi(100,1,10);
edges = 0:25:100;
values = edges(2:end);
Y = discretize(X,edges,values)
Y = 1×10

   100   100    25   100    75    25    50    75   100   100

Используйте 'IncludedEdge' введите, чтобы указать, что каждый интервал включает в себя правую границу интервала. Первый интервал включает в себя обоих ребер. Сравните результат с включением по умолчанию левых границ интервала.

X = 1:2:11;
edges = [1 3 4 7 10 11];
Y = discretize(X,edges,'IncludedEdge','right')
Y = 1×6

     1     1     3     3     4     5

Z = discretize(X,edges)
Z = 1×6

     1     2     3     4     4     5

Сгруппируйте числовые данные в категориальный массив. Используйте результат, чтобы подтвердить объем данных, который находится в пределах 1 стандартного отклонения от среднего значения.

Сгруппировать обычно распределенные данные в интервалы согласно расстоянию от среднего, измеренному в стандартных отклонениях.

X = randn(1000,1);
edges = std(X)*(-3:3);
Y = discretize(X,edges, 'categorical', ...
    {'-3sigma', '-2sigma', '-sigma', 'sigma', '2sigma', '3sigma'});

Y содержит неопределенные категориальные значения для элементов в X которые находятся дальше 3 стандартных отклонений от среднего.

Предварительный просмотр значений в Y.

Y(1:15)
ans = 15x1 categorical
     sigma 
     2sigma 
     -3sigma 
     sigma 
     sigma 
     -2sigma 
     -sigma 
     sigma 
     <undefined> 
     3sigma 
     -2sigma 
     <undefined> 
     sigma 
     -sigma 
     sigma 

Подтвердите, что приблизительно 68% данных попадают в пределах одного стандартного отклонения от среднего.

nnz(Y=='-sigma' | Y=='sigma')/numel(Y)
ans = 0.6910

Входные параметры

свернуть все

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

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Границы интервала, заданные как числовой вектор с увеличением значений. Границы интервала могут содержать последовательные повторяющиеся элементы. Последовательные элементы в edges сформировать дискретные интервалы, которые discretize используется для разбиения данных на разделы в X. По умолчанию каждый интервал включает в себя левую границу интервала, за исключением последнего интервала, которое включает в себя обеих границы интервала.

edges должен иметь по крайней мере два элемента, так как edges(1) - левый край первого интервала и edges(end) - правое ребро последнего интервала.

Пример: Y = discretize([1 3 5],[0 2 4 6]) распределяет значения 1, 3, и 5 в три интервала, которые имеют ребра [0,2), [2,4), и [4,6].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Количество интервалов в виде скалярного целого числа.

discretize разделяет данные на N интервалы равномерной ширины, выбирая границы интервала, чтобы быть «приятными» числами, которые перекрывают область значений данных. Самые большие и маленькие элементы в X обычно не попадают прямо на границы интервала. Если данные распределены неравномерно, некоторые промежуточные интервалы могут быть пустыми. Однако первый и последний интервал всегда содержат по меньшей мере одну часть данных.

Пример: [Y,E] = discretize(X,5) распределяет данные в X в 5 интервалов с равномерной шириной.

Равномерная длительность интервала, заданная как скаляр duration или calendarDuration, или как одно из значений в таблице.

Если вы задаете dur, затем discretize может использовать максимум 65 536 интервалов (или 216). Если заданная длительность интервала требует больше интервалов, то discretize использует большую ширину интервала, соответствующую максимальному количеству интервалов.

ЗначениеРаботает с...Описание
'second'

Datetime или значения длительности

Каждый интервал занимает 1 секунду.

'minute'

Datetime или значения длительности

Каждый интервал - 1 минута.

'hour'

Datetime или значения длительности

Каждый интервал - 1 час.

'day'

Datetime или значения длительности

  • Для входов datetime каждый интервал равен 1 календарному дню. Это значение учетов летнего времени сдвигов экономии времени.

  • Для входов продолжительности каждый интервал находится 1 день фиксированной длины (24 часа).

'week'

Значения Datetime

Каждый интервал занимает 1 календарную неделю.
'month'

Значения Datetime

Каждый интервал занимает 1 календарный месяц.
'quarter'

Значения Datetime

Каждый интервал составляет 1 календарный квартал.
'year'

Datetime или значения длительности

  • Для входов datetime каждый интервал равен 1 календарному году. Это значение учитывает високосные дни.

  • Для входов длительности каждый интервал составляет 1 год фиксированной длины (365,2425 дней).

'decade'

Значения Datetime

Каждый интервал составляет 1 декаду (10 календарных лет).
'century'

Значения Datetime

Каждый интервал составляет 1 век (100 календарных лет).

Пример: [Y,E] = discretize(X,'hour') делит X в интервалы с равномерной длительности в 1 часа.

Типы данных: char | duration | calendarDuration

Значения интервала, заданные как вектор любого типа данных. values должна иметь ту же длину, что и количество интервалов, length(edges)-1. Элементы в values замените индекс нормального интервала в выходе. То есть, если X(1) попадает в интервал 2, затем discretize возвращает Y(1) как values(2) а не 2.

Если values является массивом ячеек, тогда все входные данные должны принадлежать интервалу.

Пример: Y = discretize(randi(5,10,1),[1 1.5 3 5],diff([1 1.5 3 5])) возвращает ширины интервалов, а не индексы в диапазоне от 1 до 3.

Формат отображения Datetime и Duration, заданный как вектор символов. The displayFormat значение не изменяет значения в Y, только их отображение. Можно задать displayFormat использование любого допустимого формата отображения для массивов datetime и duration. Дополнительные сведения о доступных опциях см. в разделе Установка формата отображения даты и времени.

Пример: discretize(X,'day','categorical','h') задает формат отображения для массива длительности.

Пример: discretize(X,'day','categorical','yyyy-MM-dd') задает формат отображения для массива datetime.

Типы данных: char

Категориальные массивы, заданные как массив ячеек из векторов символов. categoryNames должна иметь длину, равную количеству интервалов.

Пример: Y = discretize(randi(5,10,1),[1 1.5 3 5],'categorical',{'A' 'B' 'C'}) распределяет данные по трем категориям, A, B, и C.

Типы данных: cell

Ребра для включения в каждый интервал, заданные как одно из следующих значений:

  • 'left' - Все интервалы включают левую границу интервала, за исключением последнего интервала, который включает обоих ребер. Это значение по умолчанию.

  • 'right' - Все интервалы включают правую границу интервала, за исключением первого интервала, который включает обоих ребер.

Пример: Y = discretize(randi(11,10,1),1:2:11,'IncludedEdge','right') включает правую границу интервала в каждом интервале.

Выходные аргументы

свернуть все

Интервалы, возвращенные как числовой вектор, матрица, многомерный массив или порядковый категориальный массив. Y - тот же размер, что и X, и каждый элемент описывает размещение интервала для соответствующего элемента в X. Если values задается, затем тип данных Y то же, что и values. Элементы вне области допустимого выражаются по-разному в зависимости от типа данных выхода:

  • Для числовых выходов Y содержит NaN значения для элементов вне области допустимого значения в X (где X(i) < edges(1) или X(i) > edges(end)), или где X содержит NaN.

  • Если Y является категориальным массивом, затем содержит неопределенные элементы для вне области допустимого или NaN входы.

  • Если values является вектором целочисленного типа данных, затем Y содержит 0 для вне области допустимого или NaN входы.

Форматы имен категорий по умолчанию в Y для синтаксиса discretize(X,dur,'categorical') являются:

Значение durФормат имени категории по умолчаниюПример формата
'second'

глобальный формат по умолчанию

28-Jan-2016 10:32:06

'minute'
'hour'
'day'

глобальный формат даты по умолчанию

28-Jan-2016

'week'

[global_default_date_format, global_default_date_format)

[24-Jan-2016, 30-Jan-2016)

'month'

'MMM-uuuu'

Jun-2016

'quarter'

'QQQ uuuu'

Q4 2015

'year'

'uuuu'

2016

'decade'

'[uuuu, uuuu)'

[2010, 2020)

'century'

Границы интервала, возвращенные как вектор. Задайте этот выход, чтобы увидеть границы интервала, которые discretize вычисляет в случаях, когда вы явным образом не проходите в границах интервала.

E возвращается как вектор-строка каждый раз, когда discretize вычисляет границы интервала. Если вы передаете границы интервала, то E сохраняет ориентацию edges вход.

Совет

  • Поведение discretize аналогично тому, как в histcounts функция. Использовать histcounts для поиска количества элементов в каждом интервале. С другой стороны, используйте discretize найти, к какому интервалу принадлежит каждый элемент (без подсчета).

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2015a