Error using 'omitnan'
조회 수: 18 (최근 30일)
이전 댓글 표시
Hi MATLAB community,
I wrote a code for identify 999999 to substitute to NaN, my purpose is replace NaN to mean of column data,
I tried follow code:
[l,c]=size(matrix) % size (324,25)
for w=1:c
for q = 1:l
if matrix(q,w)==999999
matrix(q,w) =NaN;
matrix(isnan(matrix))= mean(matrix(:,w),'omitnan'); % in the case NaN is present in column 21, it will substitute the element for mean of all element in column 21
end
end
end
Could help me?
Grateful
댓글 수: 1
Walter Roberson
2019년 6월 5일
Omitnan did not exist in your release. One of the toolboxes had nanmean()
채택된 답변
Adam Danz
2019년 6월 5일
편집: Adam Danz
2019년 6월 10일
An alternative that doesn't require any toolboxes:
nanidx = isnan(matrix(:,w));
mean(matrix(~nanidx,w)
Update following comments below
To compute the mean of each column of a matrix while ignoring a key value (999999),
% Create fake data
key = 999999;
matrix = magic(10);
matrix(randi(100,1,10)) = key;
% Identify the columns that contain at least one 999999
isKey = matrix == key;
colIdx = any(isKey,1);
% Count the number of rows per column that are not 999999
rowCount = sum(~isKey);
% Temporarily replace 999999 with 0 and calculate the column means
matrixTemp = matrix .* ~isKey;
colMean = sum(matrixTemp)./rowCount;
% The 2nd block above can be reduced to
% isKey = matrix == key;
% colMean = sum(matrix .* ~isKey)./ sum(~isKey);
댓글 수: 14
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!