Удаление выбросов значений
NaN 15
Sum(a)
4 9 2
NaN 7
8 1 6
Отсутствующие значения
Обработка данных
Diff(A)
Конечные разности
0.9599 0.9553 1.0000
0.9331 1.0000 0.9553
1.0000 0.9331 0.9599
Очевидно, здесь имеется сильная линейная корреляция между наблюдениями числа машин в трех различных точках, так как результаты довольно близки к единице.
MATLAB предоставляет три функции для вычисления конечных разностей.
Функция | Описание |
diff | Разность между двумя последовательными элементами вектора. Приближенное дифференцирование. |
gradient | Приближенное вычисление градиента функции. |
del2 | Пятиточечная аппроксимация Лапласиана. |
Функция diff вычисляет разность между последовательными элементами числового вектора, то есть diff(X) есть [X(2) -X(1) X(3) -X(2) ... X(n) -X(n-1)]. Так, для вектора A,
A = [9 -2 3 0 1 5 4];
MATLAB возвращает
ans =
-11 5 -3 1 4 -1
Помимо вычисления первой разности, функция diffявляется полезной для определения опре-деленных характеристик вектора. Например, вы можете использовать diff для определения, является ли вектор монотонным (значения элементов или всегда возрастают или убывают), или имеет ли он равные приращения и т.д. Следующая таблица описывает несколько различ-ных путей использования функции diff с одномерным вектором x.
Применение (тест) | Описание |
diff(x) == 0 | Тест на определение повторяющихся элементов |
all(diff(x) > 0) | Тест на монотонность |
all(diff(diff(x)) == 0) | Тест на опредедление равных приращений |
В данном разделе рассматривается как поступать с:
- Отсутствующими значениями
- Выбросами значений или несовместимыми («неуместными») значениями
Специальное обозначение NaN, соответствует в MATLAB-е нечисловое значение. В соответ-ствие с принятыми соглашениями NaN является результатом неопределенных выражений та-ких как 0/0. Надлежащее обращение с отсутствующими данными является сложной пробле-мой и зачастую меняется в различных ситуациях. Для целей анализа данных, часто удобно использовать NaN для представления отсутствующих значений или данных которые недос-тупны. MATLAB обращается со значениями NaN единообразным и строгим образом. Эти значения сохраняются в процессе вычислений вплоть до конечных результатов. Любое мате-матическое действие, производимое над значением NaN, в результате также производит NaN. Например, рассмотрим матрицу, содержащую волшебный квадрат размера 3х3, где це-нтральный элемент установлен равным NaN.
a = magic(3); a(2,2) = NaN;
a =
Вычислим сумму элементов всех столбцов матрицы:
ans =
Любые математические действия над NaN распространяют NaN вплоть до конечного резуль-тата. Перед проведением любых статистических вычислений вам следует удалить все NaN-ы из имеющихся данных. Вот некоторые возможные пути выполнения данной операции.
Программа | Описание |
i = find( ~ isnan(x)); x = x(i) | Найти индексы всех эементов вектора, не равных NaN, и затем сохранить только эти элементы |
x = x (find( ~ isnan(x))) | Удалить все NaN-ы из вектора |
x = x ( ~ isnan(x)); | Удалить все NaN-ы из вектора (быстрее). |
x (isnan(x)) = [ ]; | Удалить все NaN-ы из вектора |
X (any(isnan(X’)), :) = [ ]; | Удалить все строки матрицы X содержащие NaN-ы |
Внимание.Для нахождения нечисловых значений NaN вам следует использовать специаль-ную функцию isnan, поскольку при принятом в MATLAB-е соглашении, логическое сравне-ние NaN == NaN всегда выдает 0. Вы не можете использовать запись x(x==NaN) = [ ] для удаления NaN-ов из ваших данных.
Если вам часто приходится удалять NaN-ы, воспользуйтесь короткой программой, записан-ной в виде М-файла.
functionX = excise(X)
X(any(isnan(X')),:) = [ ];
Тогда. напечатав
X = excise(X);
вы выполните требуемое действие (excise по английски означает вырезать)
Вы можете удалить выбросы значений или несовместимые данные при помощи процедур, весьма схожих с удалением NaN-ов. Для нашей транспортной задачи, с матрицей данных count, средние значения и стандартные (среднеквадратические) отклонения каждого столбца матрицы count равны
mu = mean(count)
sigma = std(count)
mu =