От логического к числовому (Matlab) - PullRequest
0 голосов
/ 18 февраля 2019

Я почти закончил с проблемой, но что бы я ни пытался, я не могу преобразовать значения из логических в числовые.

Обнаружение необычных чисел или выбросов в наборе данных важно во многих дисциплинахпотому что выбросы идентифицируют интересные явления, экстремальные события или неверные экспериментальные результаты.Простой способ проверить, является ли значение данных выбросом, состоит в том, чтобы увидеть, является ли значение значительным числом стандартных отклонений от среднего значения набора данных.Например, является выбросом, если где - среднее значение набора данных, стандартное отклонение набора данных и число стандартных отклонений, которые считаются значимыми.
Назначьте outlierData со всеми значениями в userData, равными numberStdDevsстандартные отклонения от среднего значения userData.Подсказка: используйте логическое индексирование для возврата значений данных выбросов.
Пример : Если userData равно [9, 50, 51, 49, 100 ] и numberStdDevs равно 1, тогда outlierData равно [9, 100].

function outlierData = getOutliers(userData, numberStdDevs)
% getOutliers: Return all elements of input array data that are more than
% numStdDevs standard deviations away from the mean.
%
%   Inputs: userData - array of input data values
%           numberStdDevs - threshold number of standard deviations to
%                           determine whether a particular data value is an outlier
%
%   Outputs: outlierData - array of outlier data values


    % Assign dataMean with the mean of userData
    dataMean = mean(userData);

    % Assign dataStdDev with userData's standard deviation
    dataStdDev = std(userData);

    % Assign outlierData with Return outliers
    outlierData = (abs(userData - dataMean)) > (numberStdDevs * dataStdDev);

end

Проверьте, вернется ли getOutliers([9, 50, 51, 49, 100 ], 1) [9, 100]
Я получу 1 0 0 0 1
Проверьте, вернется ли getOutliers([76, 79, 84, 68, 85, 23, 105, 47, 97, 96, 39], 1) [23, 105, 39]
Я получу 0 0 0 0 0 1 1 0 0 0 1
Проверьте, если getOutliers([76, 79, 84, 68, 85, 23, 105, 47, 97, 96, 39], 0.5) возвращает [23, 105, 47, 97, 96, 39]
Я получаю 0 0 0 0 0 1 1 1 1 1 1

1 Ответ

0 голосов
/ 18 февраля 2019

Ты супер близко !!!Чтобы использовать логическую индексацию в MATLAB, вы просто используете mydata(logicalIndexVector) для получения новых данных.В вашем случае вы можете изменить последнюю строку вашего кода.

outlierData = userData((abs(userData - dataMean)) > (numberStdDevs * dataStdDev));

Я предлагаю прочитать эту статью и следовать практике в этой статье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...