Substracting matrix with NaN values

3 vues (au cours des 30 derniers jours)
FC93
FC93 le 8 Mar 2017
Commenté : FC93 le 8 Mar 2017
I have 4 matrix A, B, C and D. All matrix have NaN values, and matrix C and D have a lot of NaN values. Now I want to take A and substract B, C and D from it. I want that the result matrix contains only a NaN value if A has NaN or if A has a value but B, C and D do all have a NaN value. For example if a specific cell in A has a value, and the same cell has also a value in B but not in C and D (because there is an NaN) I want that matlab takes the NaN in C and B as 0. The matrix are really big so I con not do it by hand.
Example:
A=[ 1 2 3; 4 5 6; 7 NaN NaN] B =[ 1 2 3; 4 5 6; 7 2 NaN] C = [ 1 NaN 3; 4 5 6; 7 1 NaN] D = [ 1 2 3; 4 NaN 6; 7 1 NaN]
then A-B-C-D=E should be E=[ -2 -2 -6; -8 -5 -12; -14 NaN NaN]

Réponse acceptée

Walter Roberson
Walter Roberson le 8 Mar 2017
mask = isnan(B) & isnan(C) & isnan(D);
tB = B; tB(isnan(B)) =0;
tC = C; tC(isnan(C)) =0;
tD = D; tD(isnan(D)) =0;
E = A - tB - tC - tD;
E(mask) = NaN;
Any nan in A will be carried through.
  1 commentaire
FC93
FC93 le 8 Mar 2017
Thank you for your help. This is exactly what I need.

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 8 Mar 2017
Modifié(e) : KSSV le 8 Mar 2017
A=[ 1 2 3; 4 5 6; 7 NaN NaN] ;
B =[ 1 2 3; 4 5 6; 7 2 NaN] ;
C = [ 1 NaN 3; 4 5 6; 7 1 NaN] ;
D = [ 1 2 3; 4 NaN 6; 7 1 NaN] ;
% E=[ -2 -2 -6; -8 -5 -12; -14 NaN NaN] ;
R(:,:,1) = A ;
R(:,:,2) = -B ;
R(:,:,3) = -C ;
R(:,:,4) = -D ;
iwant = nansum(R,3)
You have to cross check your E once.
Other method using loops:
A=[ 1 2 3; 4 5 6; 7 NaN NaN] ;
B =[ 1 2 3; 4 5 6; 7 2 NaN] ;
C = [ 1 NaN 3; 4 5 6; 7 1 NaN] ;
D = [ 1 2 3; 4 NaN 6; 7 1 NaN] ;
E=[ -2 -2 -6; -8 -5 -12; -14 NaN NaN] ;
R(:,:,1) = A ;
R(:,:,2) = -B ;
R(:,:,3) = -C ;
R(:,:,4) = -D ;
% iwant = nansum(R,3)
[m,n,p] = size(R) ;
iwant = NaN(m,n) ;
for i = 1:m
for j = 1:n
k = squeeze(R(i,j,:)) ;
k = k(~isnan(k)) ;
if ~isempty(k)
iwant(i,j) = sum(k) ;
end
end
end
  1 commentaire
FC93
FC93 le 8 Mar 2017
Thank you for your help.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by