Mam tablicę NxM w numpy, którą chciałbym wziąć dziennik i zignorować wpisy, które były ujemne przed zrobieniem logu. Kiedy zajmie dziennik ujemnych wpisów, to zwraca -Inf, więc będę mieć macierz z pewnymi wartościami -Inf jako wynik. Następnie chciałbym podsumować kolumny tej macierzy, ale ignorując wartości -Inf - jak mogę to zrobić?Ignoring -Inf wartości w tablicach używających numpy/scipy w Pythonie
Na przykład
mylogarray = log(myarray)
# take sum, but ignore -Inf?
sum(mylogarray, 0)
Wiem, że nansum i muszę równowartość, coś infsum.
Dzięki.
czy możesz rozwinąć ten temat? Nie rozumiem tego przykładu. Jak zainicjowałeś powyższą tablicę z maskowaniem? – user248237dfsf
@ user248237 - Funkcje "numpy.ma.log" itp. Automatycznie utworzą maskowaną tablicę, w której zamaskowane zostanie wszystko, co powoduje "inf" lub "nan". Jest to nieco mniej jednoznaczne, więc możesz zamiast tego zrobić: 'a = np.ma.masked_where (a == np.inf, a)', a następnie po prostu wykonaj 'b = np.log (a)' (lub dowolna inna funkcja). Alternatywnie można ominąć maskowane tablice i po prostu zrobić 'np.log (a [a! = Np.inf]) .sum()' (Możesz indeksować według tablic logicznych, jest znacznie czystszy i szybszy od opartego na filtrach odpowiedzi.) –
@ user248237 Nie zainicjowałem maskowanej tablicy jawnie. 'a' jest po prostu normalną, niezamaskowaną tablicą. 'ma.log' maskuje wszystkie wartości, w których logarytm (rzeczywisty) jest niezdefiniowany. Następnie wynikowa maskowana tablica 'b' jest traktowana z grubsza, tak jakby nie było tam zamaskowanych wpisów. – Philipp