Jestem ciekawy, czy jest jakiś sposób wydrukowania sformatowanego numpy.arrays
, np. W sposób podobny do tego:
x = 1.23456
print '%.3f' % x
Jeśli chcę wydrukować numpy.array
liczby zmiennoprzecinkowe, drukuje kilka miejsc po przecinku, często w formacie „naukowym”, co jest raczej trudne do odczytania, nawet w przypadku tablic mało wymiarowych. Jednak numpy.array
najwyraźniej musi być wydrukowany jako ciąg, tzn %s
. Z. Czy jest na to jakieś rozwiązanie?
python
numpy
python-2.x
pretty-print
Camillio
źródło
źródło
Odpowiedzi:
Możesz użyć,
set_printoptions
aby ustawić dokładność wyjścia:I
suppress
wyklucza stosowanie notacji naukowej dla małych liczb:Zobacz dokumentację set_printoptions dla innych opcji.
Aby zastosować opcje drukowania lokalnie , używając NumPy 1.15.0 lub nowszego, możesz użyć menedżera kontekstu numpy.printoptions . Na przykład wewnątrz
with-suite
precision=3
isuppress=True
są ustawione:Ale poza
with-suite
opcjami drukowania powracają do ustawień domyślnych:Jeśli używasz wcześniejszej wersji NumPy, możesz samodzielnie utworzyć menedżera kontekstu. Na przykład,
Aby zapobiec usuwaniu zer z końca liczb zmiennoprzecinkowych:
np.set_printoptions
ma terazformatter
parametr, który pozwala określić funkcję formatu dla każdego typu.który drukuje
zamiast
źródło
print
, ale można użyć menedżera kontekstu, aby zrobić coś podobnego. Zredagowałem powyższy post, aby pokazać, co mam na myśli.np.set_printoptions(precision=3)
pomijanie zer końcowych ... jak sprawić, by wyświetlały się w ten sposób[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
jeśli chcesz reprezentację ciągu i niekoniecznie użyjprint
. Możesz po prostu wywołać__str__()
instancję tablicy numpy, a otrzymasz sformatowany ciąg znaków zgodnie z ustawionymi opcjami drukowania.Można uzyskać podzbiór
np.set_printoptions
funkcji znp.array_str
polecenia, które dotyczy tylko pojedynczej instrukcji print.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Na przykład:
źródło
Unutbu dał naprawdę kompletną odpowiedź (oni też dostali ode mnie +1), ale oto alternatywa lo-tech:
Jako funkcja (przy użyciu
format()
składni do formatowania):Stosowanie:
Indeks tablicy jest dostępny w ciągu formatu:
źródło
FYI Numpy 1.15 (data wydania w toku) będzie zawierać menedżera kontekstu do ustawiania opcji drukowania lokalnie . Oznacza to, że poniższe będą działać tak samo jak odpowiadający przykład w zaakceptowanej odpowiedzi (przez unutbu i Neil G) bez konieczności pisania własnego menedżera kontekstu. Na przykład na podstawie ich przykładu:
źródło
Klejnot, który sprawia, że zbyt łatwo jest uzyskać wynik jako ciąg (w dzisiejszych wersjach numpy), jest ukryty w denis odpowiedź:
np.array2string
źródło
Wiele lat później kolejny jest poniżej. Ale po prostu do codziennego użytku
źródło
A oto, czego używam i jest to dość nieskomplikowane:
źródło
Był zaskoczony, gdy nie
around
wspomniano o metodzie - oznacza to, że nie ma bałaganu przy opcji drukowania.źródło
Często chcę, aby różne kolumny miały różne formaty. Oto, w jaki sposób drukuję prostą tablicę 2D, używając pewnej różnorodności w formatowaniu, konwertując (plastry) mojej tablicy NumPy na krotkę:
źródło
numpy.char.mod
może być również przydatny, w zależności od szczegółów twojej aplikacji, np .:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
zwróci tablicę ciągów z elementami „Wartość = 5,00”, „Wartość = 5.10” itd. (jako nieco wymyślony przykład).źródło
Tablice numpy mają metodę,
round(precision)
która zwraca nową tablicę numpy z odpowiednio zaokrąglonymi elementami.źródło
Uważam, że zwykły format zmiennoprzecinkowy {: 9.5f} działa poprawnie - tłumiąc e-notacje o małej wartości - podczas wyświetlania listy lub tablicy za pomocą pętli. Ale ten format czasami nie tłumi swojej notacji elektronicznej, gdy formatyzator ma kilka pozycji w pojedynczej instrukcji drukowania. Na przykład:
Moje wyniki pokazują błąd w przypadkach 4, 5 i 6:
Nie mam na to wytłumaczenia, dlatego zawsze używam pętli do zmiennoprzecinkowego generowania wielu wartości.
źródło
używam
Nie jest trudno zmodyfikować go dla tablic wielowymiarowych.
źródło
Jeszcze inną opcją jest użycie
decimal
modułu:źródło