# convert zeros to nan

1 143 views (last 30 days)
Hassan on 22 Apr 2011
I have an array (10 rows,10 columns,5 bands) and wonder how I can convert the zero values to NaN. I used the following command line but it's not working. If I replace zero values with another value (like 2) it works but for an odd reason is not working with NaN. A(A==0)=NaN

John D'Errico on 22 Apr 2011
Given that your array is truly uint32, try this:
clear
uint32(nan)
ans =
0
NaNs are only defined in context of FLOATING point numbers.
Hassan on 22 Apr 2011
I tried that. I got the same answer (ans=0).

John D'Errico on 22 Apr 2011
It DOES work.
A = [1 2 0 -4 5 0 0 6];
A(A == 0) = NaN
A =
1 2 NaN -4 5 NaN NaN 6
So you are mistaken that it fails. Very likely, you are failing to understand that matlab sometimes displays a number as 0, yet it is NOT zero.
format short
A = [1 2 0.00000001 -4 5 0.000000023 0.000000000001 6]
A =
1.0000 2.0000 0.0000 -4.0000 5.0000 0.0000 0.0000 6.0000
See that there are still three values that are displayed as zero, but the simple test for zero fails to see any of them
A == 0
ans =
0 0 0 0 0 0 0 0
I will also point out that you CANNOT test for a NaN using ==, as that test will always return false. This is easy to prove.
nan == nan
ans =
0
The final possibility is that you have defined nan to be some other value. Thus
nan = 5;
Now I will not be able to assign something as a true nan, instead, matlab will use 5 when you try that. So, if you have defined nan = 0 someplace, then replacing zeros by nan will just insert zeros directly back in.
Hassan on 22 Apr 2011
OK, in that case I need to use other values instead of NaN. thanks John for the help.

Ali Can ARIK on 22 Apr 2011
Try this:
A(find(A==0)) = NaN;
Hassan on 22 Apr 2011
when I convert a value to NaN, it is converted to zero.

Matt Fig on 22 Apr 2011
Please do these three commands on your machine and paste the output, just like I did. Remember to use the {} Code button!
>> which nan
built-in (C:\Program Files\MATLAB\R2007b\toolbox\matlab\elmat\nan)
>> B = mod(1:5,2)
B =
1 0 1 0 1
>> B(~B)=nan
B =
1 NaN 1 NaN 1
.
. EDIT
Hassan, don't put in the >> when you run the code.
Hassan on 22 Apr 2011
No I didn't. I am using Matlab 2009b version on the university network. i couldn't find Matlab folder in Program Files.