MATLAB Answers

Is it possible to detect and replace abnormal/wrong numbers in an array?

3 ビュー (過去 30 日間)
Rikke
Rikke 2019 年 3 月 20 日
コメント済み: Chris Turnes 2019 年 3 月 21 日
I have a dataset which is an array containing values, and which are plotted in the figure below. A section of the array for the figure is: A = [.... 25.9, 25.9, 26.2, 27, 28, 29, 29.3, 29.6, 3, 30.4, 30.5, 30.4, 30.3, 30.3, ....]; Here is number 3 an abnormality in the array. Is it possible to detect these abnormal numbers and replace them with the average value of the number before and after? So for the number 3 in A I want it to be (29.6+30.4)/2.
figure2.jpg

採用された回答

Kevin Phung
Kevin Phung 2019 年 3 月 20 日
A = [25.9, 25.9, 26.2, 27, 28, 29, 29.3, 29.6, 3, 30.4, 30.5, 30.4, 30.3, 30.3]
abnorm =mean(A) - 3*std(A); % you can set however many standard deviations to constitute 'abnormal'
n = find(A<abnorm); %locations of abnormals
for i = 1:numel(n)
if or(n(i) == 1, n(i)==numel(A)) %if first or last index, replace with NaN;
A(n(i)) = nan;
else
A(n(i)) = (A(n(i) - 1) + A(n(i) + 1)) / 2;
end
end
A(isnan(A)) = []; %remove the endpoints that are NaN
let me know if this works for you
  7 件のコメント
Rikke
Rikke 2019 年 3 月 20 日
Aha, perfect!

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2019 年 3 月 20 日
  2 件のコメント
Chris Turnes
Chris Turnes 2019 年 3 月 21 日
You may also be interested in the filloutliers function, which lets you not only identify outliers but replace them as well.

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by