Работа с отсутствующими данными является обычной задачей предварительной обработки данных. Хотя иногда отсутствующие значения означают значимое событие в данных, они часто представляют ненадежные или непригодные для использования точки данных. В любом случае MATLAB ® имеет множество возможностей для обработки отсутствующих данных .
Форма, которую в MATLAB принимают отсутствующие значения, зависит от типа данных. Например, числовые типы данных, такие как double использовать NaN (не число) для представления отсутствующих значений.
x = [NaN 1 2 3 4];
Вы также можете использовать missing значение для представления отсутствующих числовых данных или данных других типов, таких как datetime, string, и categorical. MATLAB автоматически преобразует missing значение для собственного типа данных.
xDouble = [missing 1 2 3 4]
xDouble = 1×5
NaN 1 2 3 4
xDatetime = [missing datetime(2014,1:4,1)]
xDatetime = 1x5 datetime
NaT 01-Jan-2014 01-Feb-2014 01-Mar-2014 01-Apr-2014
xString = [missing "a" "b" "c" "d"]
xString = 1x5 string
<missing> "a" "b" "c" "d"
xCategorical = [missing categorical({'cat1' 'cat2' 'cat3' 'cat4'})]xCategorical = 1x5 categorical
<undefined> cat1 cat2 cat3 cat4
Набор данных может содержать значения, которые необходимо рассматривать как отсутствующие данные, но не являются стандартными отсутствующими значениями MATLAB в MATLAB, такими как NaN. Вы можете использовать standardizeMissing функция для преобразования этих значений в стандартное отсутствующее значение для этого типа данных. Например, считать 4 отсутствующим double значение в дополнение к NaN.
xStandard = standardizeMissing(xDouble,[4 NaN])
xStandard = 1×5
NaN 1 2 3 NaN
Предположим, что необходимо сохранить отсутствующие значения как часть набора данных, но отделить их от остальных данных. Несколько функций MATLAB позволяют управлять размещением отсутствующих значений перед дальнейшей обработкой. Например, используйте 'MissingPlacement' опция с sort функция для перемещения NaNs до конца данных.
xSort = sort(xStandard,'MissingPlacement','last')
xSort = 1×5
1 2 3 NaN NaN
Даже если отсутствующие значения в MATLAB явно не создаются, они могут появиться при импорте существующих данных или вычислении с данными. Если вы не знаете об отсутствующих значениях в данных, последующие вычисления или анализ могут ввести в заблуждение.
Например, при неосознанном построении вектора, содержащего NaN значение, значение NaN не появляется, потому что plot функция игнорирует его и выводит на график оставшиеся точки в обычном режиме.
nanData = [1:9 NaN]; plot(1:10,nanData)

Однако при вычислении среднего значения данных результат будет равен NaN. В этом случае более полезно заранее знать, что данные содержат NaN, а затем перед вычислением среднего значения его следует проигнорировать или удалить.
meanData = mean(nanData)
meanData = NaN
Один способ найти NaNs в данных с помощью isnan функция, которая возвращает логический массив, указывающий местоположение любого NaN значение.
TF = isnan(nanData)
TF = 1x10 logical array
0 0 0 0 0 0 0 0 0 1
Аналогично, ismissing функция возвращает расположение отсутствующих значений в данных для нескольких типов данных.
TFdouble = ismissing(xDouble)
TFdouble = 1x5 logical array
1 0 0 0 0
TFdatetime = ismissing(xDatetime)
TFdatetime = 1x5 logical array
1 0 0 0 0
Предположим, что вы работаете с таблицей или расписанием, состоящим из переменных с несколькими типами данных. Все отсутствующие значения можно найти одним вызовом ismissingнезависимо от их типа.
xTable = table(xDouble',xDatetime',xString',xCategorical')
xTable=5×4 table
Var1 Var2 Var3 Var4
____ ___________ _________ ___________
NaN NaT <missing> <undefined>
1 01-Jan-2014 "a" cat1
2 01-Feb-2014 "b" cat2
3 01-Mar-2014 "c" cat3
4 01-Apr-2014 "d" cat4
TF = ismissing(xTable)
TF = 5x4 logical array
1 1 1 1
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Отсутствующие значения могут представлять непригодные данные для обработки или анализа. Использовать fillmissing для замены отсутствующих значений другим значением или используйте rmmissing для полного удаления отсутствующих значений.
xFill = fillmissing(xStandard,'constant',0)xFill = 1×5
0 1 2 3 0
xRemove = rmmissing(xStandard)
xRemove = 1×3
1 2 3
Многие функции MATLAB позволяют игнорировать отсутствующие значения без необходимости сначала явно находить, заполнять или удалять их. Например, при вычислении суммы вектора, содержащего NaN значения, результат: NaN. Однако можно напрямую игнорировать NaNs в сумме, используя 'omitnan' опция с sum функция.
sumNan = sum(xDouble)
sumNan = NaN
sumOmitnan = sum(xDouble,'omitnan')sumOmitnan = 10
fillmissing | ismissing | missing | standardizeMissing