convert zeros to nan
Mostrar comentarios más antiguos
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
I apperciate your help.
1 comentario
Marina
el 9 de Feb. de 2024
Try the standardizeMissing function.
Respuesta aceptada
Más respuestas (3)
John D'Errico
el 22 de Abr. de 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.
7 comentarios
Hassan
el 22 de Abr. de 2011
John D'Errico
el 22 de Abr. de 2011
You have said ONLY that it does not work for you. You have NOT said what it does when you try to do this though. Show an example where it fails.
Sean de Wolski
el 22 de Abr. de 2011
What class is your data?
>> class(A)
Nan is not defined for all classes.
Hassan
el 22 de Abr. de 2011
John D'Errico
el 22 de Abr. de 2011
I think Sean has the answer. Are you using some other class? If you don't give us sufficient information, we are just guessing here.
John D'Errico
el 22 de Abr. de 2011
Nan is not defined as a valid value for uint32 numbers.
Hassan
el 22 de Abr. de 2011
Ali Can ARIK
el 22 de Abr. de 2011
Try this:
A(find(A==0)) = NaN;
4 comentarios
Hassan
el 22 de Abr. de 2011
John D'Errico
el 22 de Abr. de 2011
What does it do when you try that? Have you possibly defined a variable nan to have some other value?
Hassan
el 22 de Abr. de 2011
Hassan
el 22 de Abr. de 2011
Matt Fig
el 22 de Abr. de 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.
Categorías
Más información sobre Logical 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!