Filter löschen
Filter löschen

Substracting matrix with NaN values

1 Ansicht (letzte 30 Tage)
FC93
FC93 am 8 Mär. 2017
Kommentiert: FC93 am 8 Mär. 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]

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 8 Mär. 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 Kommentar
FC93
FC93 am 8 Mär. 2017
Thank you for your help. This is exactly what I need.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 8 Mär. 2017
Bearbeitet: KSSV am 8 Mär. 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

Kategorien

Mehr zu Linear Algebra finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by