Simple Method for Finding if ANY NaN values occur in a matrix.

202 visualizaciones (últimos 30 días)
BM
BM el 20 de Mzo. de 2018
Movida: Dyuman Joshi el 7 de Mayo de 2024
Is there a quick method of finding out whether or not a matrix or a vector in matlab has any NaN values? A large matrix filled with mostly 0's (after applying isnan(MATRIX)) does not really cut it.
Don't get me wrong, I would information of finding out where such NaN's occur and how to count how many NaN values appear in a given matrix, but I really would like to know if there is a simple way to identify if any NaN's at all appear in a given matrix with a simple 1 or 0 response, as it would save me time having to inspect the matrix or write a program to do it.
Would there be simple ways of counting how many NaN's occur, and identify their location in a given matrix? I assume such techniques would be applicable to finding infinities as well, am I correct?

Respuesta aceptada

James Tursa
James Tursa el 20 de Mzo. de 2018
Editada: James Tursa el 20 de Mzo. de 2018
Short of a mex routine that can avoid the creation of a potentially large intermediate array, I think you are stuck with isnan( ). E.g., counting the number of NaN's
result = sum(isnan(MATRIX(:)));
Or if you want locations, then find( ) etc.
And yes, you can do similar calculations with the isinf( ) function.
A mex routine to do this would not be too difficult to write, btw ...
  19 comentarios
BM
BM el 21 de Mzo. de 2018
Movida: Dyuman Joshi el 7 de Mayo de 2024
And if that's the case, they can simply define the function f = function_name
as you showed above
I just didn't want to add another variable to the list I already had. Because I was troubleshooting in this particular way, it did me no good to do so either.
Walter Roberson
Walter Roberson el 21 de Mzo. de 2018
Movida: Dyuman Joshi el 7 de Mayo de 2024
"I just didn't want to add another variable to the list I already had"
disp(nanappear(n))
If that is too much, then, Sure, you can use
function nanappear(n)
disp(any(isnan(n(:))));
But I would not expect that other people would find it useful.
Note: I might suggest "anynan" as the function name.

Iniciar sesión para comentar.

Más respuestas (3)

Stefan Siemens
Stefan Siemens el 12 de Nov. de 2018
Personally I think
any(isnan(your_matrix(:)));
is the easiest way.

Jan
Jan el 21 de Mzo. de 2018
Here is a fast C-Mex function to find out, if any element of one array occurs in the other: FEX: anyEq .
hasAnyNaN = anyEq(X, NaN);
This does not create a temporary array like isnan(X) and stops the search at the first match already. So this is treated as efficient as possible:
X = NaN(1, 1e6);
T = anyEq(X, NaN); % Performs 1 comparison only

Charles Rice
Charles Rice el 7 de Mayo de 2024
If you're finding this answer post 2022, there's a new function anynan(A).

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by