2009-11-11 18 views

Odpowiedz

9

Właśnie znalazłem odpowiedź:

k=find(isnan(yourarray)) 

K będzie lista Nan elementów indeksów.

+5

W Matlab często nie potrzebujesz wywoływać find() w tablicy logicznej, ponieważ tablice logiczne mogą być używane bezpośrednio zamiast indeksów dla większości dalszych operacji, patrz na przykład http: //blogs.mathworks .com/loren/2006/08/09/istota-indeksowania/ – Mikhail

+0

Są chwile, kiedy potrzebujesz tylko tablicy logicznej, i są chwile, kiedy potrzebujesz indeksów. Zgadzam się nie wykonywać niepotrzebnych operacji, jednak PO nie wyjaśnił, czego chciał. Ta odpowiedź jest poprawna. – MatlabDoug

23

Podczas gdy isnan jest właściwym rozwiązaniem, po prostu wskażę sposób jego znalezienia. Użyj lookfor. Jeśli nie znasz nazwy funkcji w MATLAB, spróbuj lookfor.

lookfor nan 

szybko daje nazwy niektórych funkcji, które pracują z Nans, jak również daje pierwszą linię ich pomocą bloków. Tutaj wymieniłby (między innymi)

ISNAN Prawdą jest, że nie jest liczbą.

który jest wyraźnie funkcją, której chcesz użyć.

+2

+1 za nauczenie człowieka łowienia ryb! – Marc

24

Jak wspomniano, najlepszą odpowiedzią jest isnan() (chociaż +1 dla meta-odpowiedzi zrębków). Pełniejszy przykład jak używać go z logicznego indeksowania:

>> 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) zwraca logiczną tablicę, tablicę prawdziwej & fałszywego tej samej wielkości co z „prawdziwej” wszędzie tam jest nan, który może być używany do index into a.

+0

Przyjąłem twoją odpowiedź, ponieważ pokazałeś mi, jak zastąpić NaN wartością 0, co jest nieocenione dla mojego celu. – Graviton

Powiązane problemy