2011-07-15 22 views
19

Czekam na zastąpienie liczby przez NaN w numpy i szukam funkcji jak numpy.nan_to_num, z wyjątkiem odwrotnej.Numpy - Zamień numer na NaN

Liczba prawdopodobnie zmieni się, ponieważ przetwarzane są różne tablice, ponieważ każda może mieć jednoznacznie zdefiniować wartość NoDataValue. Widzę ludzi używających słowniki, ale tablice są duże i wypełnione zarówno dodatnimi, jak i ujemnymi zmiennymi. Podejrzewam, że nie jest wydajne ładowanie tych wszystkich w cokolwiek, aby tworzyć klucze.

Próbowałem użyć następujących i numpy wymagających, żebym użył dowolnej() lub wszystkich(). Zdaję sobie sprawę, że muszę powtarzać element mądry, ale mam nadzieję, że wbudowana funkcja może to osiągnąć.

def replaceNoData(scanBlock, NDV): 
    for n, i in enumerate(array): 
     if i == NDV: 
      scanBlock[n] = numpy.nan 

NDV to brak wartości danych GDAL, a tablica to tablica numpy.

Czy jest to tablica z maską, którą można wykonać?

+1

nie jestem pewien, czy rozumiem, co jest złego w roztworze Ci zapewnić. Czy to nie działa poprawnie? –

+0

@Chris Gregg To rozwiązanie wymaga trochę wcięcia, nie musi zwracać tablicy (ponieważ jest na miejscu), powinno raczej unikać używania 'tablica' jako zmiennej, aby uniknąć pomyłki z np.array, ale co najważniejsze, będzie strasznie powolny w porównaniu do typowego numpy indeksowania i nadawania. – Paul

+0

@Paul Moją obawą była szybkość, bardzo dziękuję za odpowiedź poniżej. Użyłem tych zmiennych po prostu, aby uczynić kod jaśniejszym, I, aby uniknąć używania również tablicy. – Jzl5325

Odpowiedz

35
A[A==NDV]=numpy.nan 

a == NDV będzie produkować logiczną tablicę, która może być używana jako wskaźnik dotyczący

+0

jest numpy.nan specjalną wartość? Nie mogę tego znaleźć przez Google ... – alwaysaskingquestions

+1

Jest to specjalna sekwencja bitów poza prawidłowym zakresem dla używanego typu danych. Jest używany do oznaczenia brakujących danych lub wyniku błędu matematycznego, który nie spowodował poprawnej wartości. Mam nadzieję, że to pomaga: https://en.wikipedia.org/wiki/NaN – Paul

+0

Tak, tak! Dziękuję Ci :) – alwaysaskingquestions