How to plus two nan matrix

If my two matrix are
a=3*3,b=3*3,c=3*3
a=[1 2 3,4 5 nan,7 nan 9]
b=[nan 3 3,4 5 6,nan 8 9]
c=a+b
Is that possible that c=[1 5 6,8 10 6,7 8 18]
How to calculate?
Thanks

 Accepted Answer

c = a + b;
c(isnan(c)) = a(isnan(c));
c(isnan(c)) = b(isnan(c));

5 Comments

That should do it. Could also just pre-process "a" and "b" with:
a(isnan(a)) = 0;
b(isnan(b)) = 0;
c = a+b;
but then you'll end up with 0 in places that both "a" and "b" are NaN. I like James' answer better.
thank you!
But if want to average the matrix
Hoe to do it?
like c=(a+b)/2;
Depending on what you want to have happen to the "NaN" spots, I am guessing you will want either
c = (a + b)/2;
c(isnan(c)) = a(isnan(c));
c(isnan(c)) = b(isnan(c));
or
c = (a + b)/2;
c(isnan(c)) = a(isnan(c))/2;
c(isnan(c)) = b(isnan(c))/2;
Thanks !!

Sign in to comment.

More Answers (2)

Paulo Neto
Paulo Neto on 28 Nov 2018
How I can do this: c = (a + b)/b
Regards

3 Comments

Did you mean element-wise division? c = (a+b)./b
I'm considering a and b as arrays:
a=3*3,b=3*3,c=3*3
a=[1 2 3,4 5 nan,7 nan 9]
b=[nan 3 3,4 5 6,nan 8 9]
To calculate c = a + b, I'm using your routine:
c(isnan(c)) = a(isnan(c));
c(isnan(c)) = b(isnan(c));
and results in c=[1 5 6,8 10 6,7 8 18]
But I need to calculate: (a+b)./b, can I use the same method?
What would you want the individual result to be if "a" is NaN, and if "b" is NaN?

Sign in to comment.

Paulo Neto
Paulo Neto on 28 Nov 2018
I'm considering a and b as arrays:
a=3*3,b=3*3,c=3*3
a=[1 2 3,4 5 nan,7 nan 9]
b=[nan 3 3,4 5 6,nan 8 9]
To calculate c = a + b, I'm using your routine:
c(isnan(c)) = a(isnan(c));
c(isnan(c)) = b(isnan(c));
and results in c=[1 5 6,8 10 6,7 8 18]
But I need to calculate: (a+b)./b, can I use the same method?

Tags

Asked:

on 16 May 2017

Commented:

on 28 Nov 2018

Community Treasure Hunt

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

Start Hunting!