Kiedy drukuję tablicę numpy, otrzymuję obciętą reprezentację, ale chcę pełną tablicę.
Czy jest na to sposób?
Przykłady:
>>> numpy.arange(10000)
array([ 0, 1, 2, ..., 9997, 9998, 9999])
>>> numpy.arange(10000).reshape(250,40)
array([[ 0, 1, 2, ..., 37, 38, 39],
[ 40, 41, 42, ..., 77, 78, 79],
[ 80, 81, 82, ..., 117, 118, 119],
...,
[9880, 9881, 9882, ..., 9917, 9918, 9919],
[9920, 9921, 9922, ..., 9957, 9958, 9959],
[9960, 9961, 9962, ..., 9997, 9998, 9999]])
np.inf
?np.nan
i'nan'
działają tylko według total fluke, a'nan'
nawet nie działają w Pythonie 3, ponieważ zmieniono implementację porównania mieszanego typu, którathreshold='nan'
zależała od.threshold=np.nan
zamiast'nan'
zależeć od innej fuksji, która polega na tym, że logika drukowania macierzy porównuje rozmiar macierzy z progiema.size > _summaryThreshold
. To zawsze wracaFalse
do_summaryThreshold=np.nan
. Gdyby porównanie byłoa.size <= _summaryThreshold
, testowanie, czy tablica powinna być w pełni wydrukowana zamiast testowania, czy powinna podsumowując, ten próg uruchomiłby podsumowanie dla wszystkich tablic.)tmp
tylko numpy.arraylist(tmp)
. Inne opcje z innym formatowaniem sątmp.tolist()
dla większej kontroliprint("\n".join(str(x) for x in tmp))
.Odpowiedzi:
Użyj
numpy.set_printoptions
:źródło
numpy
tablicę tylko raz, niestety to rozwiązanie ma tę wadę, że wymaga zresetowania tej zmiany konfiguracji po wydrukowaniu.Sugeruję używanie
np.inf
zamiast tego,np.nan
co sugerują inni. Oba działają dla twojego celu, ale ustawiając próg na „nieskończoność”, każdy odczytuje twój kod, co masz na myśli. Próg „nie liczby” wydaje mi się trochę niejasny.źródło
np.set_printoptions(threshold=1000)
przywróci domyślne zachowanie. Ale możesz ustawić ten próg tak nisko lub wysoko, jak chcesz.np.set_printoptions(threshold=np.inf)
po prostu zmienia maksymalny rozmiar drukowanej tablicy, zanim zostanie obcięta do nieskończoności, dzięki czemu nigdy nie zostanie obcięta bez względu na to, jak duża. Jeśli ustawisz próg na dowolną liczbę rzeczywistą, będzie to maksymalny rozmiar.np.inf
,np.nan
lub'nan'
. Cokolwiek tam umieścisz, NumPy nadal będzie używać zwykłego,>
aby porównać rozmiar tablicy z twoim progiem.np.nan
działa tylko dlatego, że jesta.size > _summaryThreshold
zamiasta.size <= _summaryThreshold
inp.nan
zwracaFalse
wszystkie porównania>
/<
/>=
/<=
.'nan'
działa tylko z powodu delikatnych szczegółów implementacji mieszanej logiki porównawczej Python 2; psuje się całkowicie w Pythonie 3.np.get_printoptions()['threshold']
. Możesz zapisać tę wartość przed ustawieniem progu, a następnie przywrócić ją później (lub użyćwith
bloku, jak sugerowano w innych odpowiedziach).Poprzednie odpowiedzi są prawidłowe, ale jako słabszą alternatywę możesz przekształcić się w listę:
źródło
NumPy 1.15 lub nowszy
Jeśli używasz NumPy 1.15 (wydany 2018-07-23) lub nowszego, możesz użyć
printoptions
menedżera kontekstu:(oczywiście zastąpić
numpy
przeznp
jeśli to jak importowanenumpy
)Zastosowanie menedżera kontekstu (
with
-block) zapewnia, że po zakończeniu menedżera kontekstu opcje drukowania powrócą do tego, co były przed rozpoczęciem bloku. Zapewnia to, że ustawienie jest tymczasowe i dotyczy tylko kodu w bloku.Zobacz
numpy.printoptions
dokumentację, aby uzyskać szczegółowe informacje na temat menedżera kontekstu i innych obsługiwanych przez niego argumentów.źródło
To brzmi jak używasz numpy.
W takim przypadku możesz dodać:
To wyłączy drukowanie w rogu. Aby uzyskać więcej informacji, zobacz ten samouczek NumPy .
źródło
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Oto jednorazowy sposób na zrobienie tego, co jest przydatne, jeśli nie chcesz zmieniać ustawień domyślnych:
źródło
'nan'
,np.nan
lub któregokolwiek z powyższych. To nie jest obsługiwane, a ta zła rada powoduje ból dla osób przechodzących na python 3numpy.set_printoptions(threshold=numpy.inf)
Używanie menedżera kontekstu, gdy Paul Price podstępnie
źródło
np.printoptions
numpy.savetxt
lub jeśli potrzebujesz łańcucha:
Domyślny format wyjściowy to:
i może być skonfigurowany z dalszymi argumentami.
Zwróć uwagę w szczególności, że nie pokazuje to również nawiasów kwadratowych i pozwala na wiele dostosowań, jak wspomniano w: Jak wydrukować tablicę Numpy bez nawiasów?
Testowane na Pythonie 2.7.12, numpy 1.11.1.
źródło
Jest to niewielka modyfikacja (usunięto opcję przekazywania dodatkowych argumentów do
set_printoptions)
odpowiedzi neoka .Pokazuje, jak można
contextlib.contextmanager
łatwo utworzyć takiego menedżera kontekstu z mniejszą liczbą wierszy kodu:W twoim kodzie można go użyć w następujący sposób:
źródło
try
/finally
wokółyield
menedżera kontekstu, aby czyszczenie odbywało się bez względu na wszystko.with np.printoptions(threshold=np.inf):
W uzupełnieniu do tej odpowiedzi z maksymalnej liczby kolumn (ustalonych za pomocą
numpy.set_printoptions(threshold=numpy.nan)
) istnieje również limit znaków do wyświetlenia. W niektórych środowiskach, takich jak wywoływanie Pythona z bash (zamiast sesji interaktywnej), można to naprawić, ustawiając parametrlinewidth
w następujący sposób.W takim przypadku twoje okno powinno ograniczyć liczbę znaków do zawinięcia linii.
Dla tych, którzy używają wzniosłego tekstu i chcą zobaczyć wyniki w oknie wyjściowym, należy dodać opcję kompilacji
"word_wrap": false
do pliku wzniosłej kompilacji [ źródło ].źródło
Od wersji NumPy 1.16 więcej informacji można znaleźć na bilecie GitHub 12251 .
źródło
Aby go wyłączyć i powrócić do normalnego trybu
źródło
threshold=0
, co oznacza „obcinaj tak szybko, jak to możliwe” - wcale nie to, czego chcesz.Załóżmy, że masz tablicę numpy
Jeśli chcesz wydrukować pełną tablicę w sposób jednorazowy (bez przełączania np.set_printoptions), ale chcesz czegoś prostszego (mniej kodu) niż menedżer kontekstu, po prostu zrób
źródło
Drobna modyfikacja: (ponieważ zamierzasz wydrukować ogromną listę)
Zwiększy to liczbę znaków w wierszu (domyślna szerokość linii 75). Użyj dowolnej wartości szerokości linii, która odpowiada Twojemu środowisku kodowania. Dzięki temu nie będziesz musiał przechodzić przez ogromną liczbę linii wyjściowych, dodając więcej znaków w linii.
źródło
Możesz użyć
array2string
funkcji - docs .źródło
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Nie zawsze chcesz wydrukować wszystkie elementy, szczególnie w przypadku dużych tablic.
Prosty sposób, aby pokazać więcej przedmiotów:
Domyślnie działa dobrze, gdy tablica podzielona na <1000.
źródło
Jeśli masz dostępne pandy,
unika efektu ubocznego wymagającego resetu
numpy.set_printoptions(threshold=sys.maxsize)
i nie dostajesz numpy.array i nawiasów. Uważam to za wygodne do zrzucania szerokiej tablicy do pliku dziennikaźródło
Jeśli tablica jest zbyt duża, aby ją wydrukować, NumPy automatycznie pomija środkową część tablicy i drukuje tylko rogi: Aby wyłączyć to zachowanie i zmusić NumPy do wydrukowania całej tablicy, możesz zmienić opcje drukowania za pomocą
set_printoptions
.lub
Możesz także skorzystać z dokumentacji numpy w dokumentacji numpy dla „lub części”, aby uzyskać dodatkową pomoc.
źródło
'nan'
,np.nan
lub któregokolwiek z powyższych. To nie jest obsługiwane, a ta zła rada powoduje ból dla osób przechodzących na python 3ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation