2009-11-11 1 views

risposta

9

Ho appena trovato la risposta:

k=find(isnan(yourarray)) 

k sarà un elenco di elementi indicies NaN.

+5

In Matlab spesso non è necessario chiamare find() sull'array logico perché gli array logici possono essere utilizzati direttamente anziché gli indici per la maggior parte delle operazioni successive, vedere ad esempio http: //blogs.mathworks .com/loren/2006/08/09/essence-of-indexing/ – Mikhail

+0

Ci sono momenti in cui hai bisogno solo della matrice logica, e ci sono momenti in cui hai bisogno degli indici. Sono d'accordo a non fare operazioni non necessarie, tuttavia il PO non ha chiarito quale voleva. Questa risposta è corretta. – MatlabDoug

23

Mentre isnan è la soluzione corretta, indicherò semplicemente il modo per averlo trovato. Usa lookfor. Quando non conosci il nome di una funzione in MATLAB, prova lookfor.

lookfor nan 

rapidamente dare i nomi di alcune funzioni che lavorano con NaNs, oltre a dare la prima linea dei loro blocchi di aiuto. Qui, avrebbe elencato (tra le altre cose)

ISNAN True for Not-a-Number.

che è chiaramente la funzione che si desidera utilizzare.

+2

+1 per insegnare a un uomo a pescare! – Marc

24

Come notato, la risposta migliore è isnan() (anche se +1 per meta-risposta di woodchips). Un esempio più completo di come usarlo con indicizzazione logico:

>> a = [1 nan;nan 2] 

a = 

    1 NaN 
NaN  2 

>> %replace nan's with 0's 
>> a(isnan(a))=0 

a = 

1  0 
0  2 

isnan (a) restituisce un array logico, un array di vera & falso della stessa dimensione come, con "vero" ogni luogo v'è un nan, che può essere utilizzato per index into a.

+0

Ho accettato la tua risposta perché mi hai mostrato come sostituire il NaN con il valore 0, che è inestimabile per il mio scopo. – Graviton