Piszę symulację obserwacji astronomii. Mam tablicę danych, która wynosi 1 pomiar na 24 godziny:
data = [0,1,2,3,4]
I mam tablicę, która jest minutą chmury / deszczu w ciągu 24 godzin, zaokrągloną do najbliższej godziny:
weather = [0,60,120,180,0]
Chcę użyć ukrytej tablicy, aby ukryć wartościw tablicy danych na podstawie wartości z tablicy pogody. Maskowanie jest ważne (zamiast usuwania) do kreślenia i analizy danych w dalszej linii.
Więc jeśli chcę wyświetlać tylko punkty danych, w których wystąpił <120 minut przestoju:
downtime = 120
data_masked = np.ma.masked_where(weather < downtime, data)
Powinno to spowodować:
data_masked = [0, 1, ---, ---, 4]
Ale moja data_masked wydaje się robić coś przeciwnego. Jeśli wykreślę zarówno moje dane, jak i pogodę na tej samej osi. Zamaskowuję punkty, w których występuje przestój pogody poniżej mój próg.
Próbowałem już odwrócić operatora, który po prostu wydaje się trzymać wszystko. Jakieś pomysły czy brakuje mi punktu numpy.ma?
Dzięki!
Odpowiedzi:
1 dla odpowiedzi № 1Będziesz chciał użyć
np.ma.MaskedArray(data,mask)
Zwróć uwagę, że maska określa dane, które mają być zamaskowane. Także dla następującego rodzaju operacji
weather < downtime
do pracy zgodnie z intencją, "pogoda" musi być tablicą, a nie listą, więc:
weather = np.array([0,60,120,180,0])
...
data_masked=np.ma.MaskedArray(data, weather >= downtime)
Zwróć uwagę, że użyłem "> =" zamiast "<", aby uzyskać wymagany wynik
2 dla odpowiedzi nr 2
Za pomocą numpy.ma
zwraca maskę. To jest to ukrywa (maskuje) wszystko, co pasuje do stanu weather < downtime
. Jeśli chcesz pokazać wszystko, co pasuje do stanu, po prostu odwróć stan:
data = np.array([0,1,2,3,4])
weather = np.array([0,60,120,180,0])
downtime = 120
data_masked = np.ma.masked_where(weather >= downtime, data)
data_masked
Następnie wynik będzie:
masked_array(data = [0 1 -- -- 4],
mask = [False False True True False],
fill_value = 999999)
Aby uzyskać dostęp do danych, użyj data_masked.data
.