exponenta event banner

дискретизировать

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

Описание

пример

Y = discretize(X,edges) возвращает индексы ячеек, которые содержат элементы X. 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 или duration, делит 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

Создайте вектор даты и времени 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'

Значения даты и времени или длительности

Каждая ячейка составляет 1 секунду.

'minute'

Значения даты и времени или длительности

Каждая ячейка - 1 минута.

'hour'

Значения даты и времени или длительности

Каждая ячейка составляет 1 часа.

'day'

Значения даты и времени или длительности

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

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

'week'

Значения даты и времени

Каждая ячейка составляет 1 календарную неделю.
'month'

Значения даты и времени

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

Значения даты и времени

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

Значения даты и времени или длительности

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

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

'decade'

Значения даты и времени

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

Значения даты и времени

Каждая ячейка составляет 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, заданный как символьный вектор. 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 вычисляет края ячейки. Если вы проходите в ребрах bin, то E сохраняет ориентацию edges вход.

Совет

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2015a