дискретизация

Данные группы в интервалы или категории

Синтаксис

Y = discretize(X,edges)
[Y,E] = discretize(X,N)
[Y,E] = discretize(X,dur)
[___] = discretize(___,values)
[___] = discretize(___,'categorical')
[___] = discretize(___,'categorical',displayFormat)
[___] = discretize(___,'categorical',categoryNames)
[___] = discretize(___,'IncludedEdge',side)

Описание

пример

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. values должен быть вектором с длиной, равной количеству интервалов.

пример

[___] = 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(15,1);
[Y,E] = discretize(X,3)
Y = 15×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 array
   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 array
     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 array
   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 array
     [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 array
     [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 array
     [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 array
     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 содержит данные, которые вы хотите распределить в интервалы.

Типы данных: единственный | удваиваются | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический | datetime | длительность

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

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

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

Типы данных: единственный | удваиваются | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | логический | datetime | длительность

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

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

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

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

ЗначениеРаботы с...Описание
второй

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

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

минута

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

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

час

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

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

день

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

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

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

неделя

Значения datetime

Каждый интервал составляет 1 календарную неделю.
месяц

Значения datetime

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

Значения datetime

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

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

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

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

'decade'

Значения datetime

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

Значения datetime

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

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

Типы данных: char | длительность | calendarDuration

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

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

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

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

Пример: дискретизируйте (X, 'день', 'категориальный', 'h') задает формат отображения для массива длительности.

Пример: дискретизируйте (X, 'день', 'категориальный', 'yyyy-MM-dd') задает формат отображения для массива datetime.

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

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

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

Типы данных: ячейка

Края, чтобы включать в каждый интервал, заданный как одно из этих значений:

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

  • 'right' — Все интервалы включают правильный край интервала, за исключением первого интервала, который включает оба края.

Пример: Y = дискретизируют (randi (11,10,1), 1:2:11, 'IncludedEdge', 'право') включает правильный край интервала в каждый интервал.

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

свернуть все

Интервалы, возвращенные как числовой вектор, матрица, многомерный массив или порядковый категориальный массив. 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Формат названия категории по умолчаниюПример формата
второй

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

28-Jan-2016 10:32:06

минута
час
день

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

28-Jan-2016

неделя

[global_default_date_format, global_default_date_format)

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

месяц

'MMM-uuuu'

Jun-2016

четверть

'QQQ uuuu'

Q4 2015

год

'uuuu'

2016

'decade'

'[uuuu, uuuu)'

[2010, 2020)

'century'

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

Советы

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

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

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

Была ли эта тема полезной?