discretize

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

Описание

пример

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

пример

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

пример

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

пример

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

пример

[___] = discretize(___,'IncludedEdge',side), где side 'left' или 'right', задает, включает ли каждый интервал свою правильную или левую границу интервала. Например, если side 'right', затем каждый интервал включает правильную границу интервала, за исключением первого интервала, который включает оба ребра. В этом случае, jинтервал th содержит элемент 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 и формат отображения длительности в виде вектора символов. displayFormat значение не изменяет значения в Y, только их отображение. Можно задать displayFormat использование любого допустимого формата отображения для datetime и массивов длительности. Для получения дополнительной информации о доступных параметрах, смотрите Формат отображения Даты и времени Набора.

Пример: 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'}) распределяет данные в три категории, AB, и 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++ с помощью MATLAB® Coder™.

Представленный в R2015a