How can I average multiple matrices by element, ignoring NaN values, to create a new matrix of the same size?
Mostrar comentarios más antiguos
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 comentarios
Azzi Abdelmalek
el 16 de Oct. de 2013
How your matrices are stored?
Patrick
el 16 de Oct. de 2013
Vivek Selvam
el 16 de Oct. de 2013
Does your matrix have any element as zero?
Patrick
el 16 de Oct. de 2013
Respuesta aceptada
Más respuestas (1)
Azzi Abdelmalek
el 16 de Oct. de 2013
Editada: Azzi Abdelmalek
el 16 de Oct. de 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 comentarios
Patrick
el 16 de Oct. de 2013
Azzi Abdelmalek
el 16 de Oct. de 2013
No, you can check for the above example,
size(out)
Azzi Abdelmalek
el 16 de Oct. de 2013
Editada: Azzi Abdelmalek
el 16 de Oct. de 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
el 16 de Oct. de 2013
Azzi Abdelmalek
el 16 de Oct. de 2013
Editada: Azzi Abdelmalek
el 16 de Oct. de 2013
Look at edited answer, I've mistaken by using .* instead of ./
Patrick
el 16 de Oct. de 2013
Azzi Abdelmalek
el 16 de Oct. de 2013
Editada: Azzi Abdelmalek
el 16 de Oct. de 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
el 16 de Oct. de 2013
Categorías
Más información sobre Data Preprocessing en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!