How can I average multiple matrices by element, ignoring NaN values, to create a new matrix of the same size?
Show older comments
I have 248 matrices, each of size 72x144. There are some NaN values inserted randomly here and there in these matrices. I would like to create a new matrix, also of size 72x144, which is an average by element of the originals, but ignoring the NaN values. For example:
Original:
matrixA = [2 3 5 | 3 NaN 1 | 2 4 3]
matrixB = [3 4 NaN | 1 2 5 | NaN 3 5]
matrixC = [NaN 2 3 | 2 5 3 | 1 2 1]
Want:
matrixAvg = [2.5 3 4 | 2 3.5 3 | 1.5 3 3]
Is there a simple way for me to do this?
4 Comments
Azzi Abdelmalek
on 16 Oct 2013
How your matrices are stored?
Patrick
on 16 Oct 2013
Vivek Selvam
on 16 Oct 2013
Does your matrix have any element as zero?
Patrick
on 16 Oct 2013
Accepted Answer
More Answers (1)
Azzi Abdelmalek
on 16 Oct 2013
Edited: Azzi Abdelmalek
on 16 Oct 2013
Edit
matrixA = [2 3 5 ; 3 NaN 1 ; 2 4 3]
matrixB = [3 4 NaN ; 1 2 5 ; NaN 3 5]
matrixC = [NaN 2 3 ; 2 5 3 ; 1 2 1]
A={matrixA matrixB matrixC}
B=cat(3,A{:})
idx=find(isnan(B))
C=ones(size(B));
C(idx)=0;
B(idx)=0;
out=sum(B,3)./sum(C,3)
8 Comments
Patrick
on 16 Oct 2013
Azzi Abdelmalek
on 16 Oct 2013
No, you can check for the above example,
size(out)
Azzi Abdelmalek
on 16 Oct 2013
Edited: Azzi Abdelmalek
on 16 Oct 2013
There is just one mistake
out=sum(B,3)./sum(C,3) % instead of .*
out =
2.5000 3.0000 4.0000
2.0000 3.5000 3.0000
1.5000 3.0000 3.0000
Patrick
on 16 Oct 2013
Azzi Abdelmalek
on 16 Oct 2013
Edited: Azzi Abdelmalek
on 16 Oct 2013
Look at edited answer, I've mistaken by using .* instead of ./
Patrick
on 16 Oct 2013
Azzi Abdelmalek
on 16 Oct 2013
Edited: Azzi Abdelmalek
on 16 Oct 2013
The code replace NaN by zeros, but when calculating the mean, it is ignored, for example
[ nan 2 3] % is replaced by
[0 2 3]
% to calculate the mean
sum([0 2 3])./sum([0 1 1]) % =5/2=2.5
Patrick
on 16 Oct 2013
Categories
Find more on Data Preprocessing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!