Jak wydrukować pełną tablicę NumPy bez obcinania?
Kiedy drukuje tablicę numpy, dostaję obciętą reprezentację, ale chcę mieć pełną tablicę.
Czy jest jakiś sposób, aby to zrobić?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]])
21 answers
Użycie numpy.set_printoptions
:
import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-21 21:15:49
import numpy as np
np.set_printoptions(threshold=np.inf)
Sugeruję użycie np.inf
zamiast np.nan
, co jest sugerowane przez innych. Oba działają dla Twojego celu, ale ustawiając próg na "nieskończoność", każdy czytający Twój kod jest oczywisty, co masz na myśli. Posiadanie progu "nie liczby" wydaje mi się trochę niejasne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-24 14:01:51
Poprzednie odpowiedzi są poprawne, ale jako słabszą alternatywę można przekształcić w listę:
>>> numpy.arange(100).reshape(25,4).tolist()
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21,
22, 23], [24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35], [36, 37, 38, 39], [40, 41,
42, 43], [44, 45, 46, 47], [48, 49, 50, 51], [52, 53, 54, 55], [56, 57, 58, 59], [60, 61,
62, 63], [64, 65, 66, 67], [68, 69, 70, 71], [72, 73, 74, 75], [76, 77, 78, 79], [80, 81,
82, 83], [84, 85, 86, 87], [88, 89, 90, 91], [92, 93, 94, 95], [96, 97, 98, 99]]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 23:46:40
Ustawienie tymczasowe
Jeśli używasz NumPy 1.15 (wydanej 2018-07-23) lub nowszej, możesz użyć menedżera kontekstu printoptions
:
with numpy.printoptions(threshold=numpy.inf):
print(arr)
(oczywiście zastąp numpy
przez np
jeśli tak zaimportowałeś numpy
)
Użycie Menedżera kontekstu (blok with
) zapewnia, że po zakończeniu menedżera kontekstu opcje drukowania powrócą do tego, co było przed uruchomieniem bloku. Zapewnia, że ustawienie jest tymczasowe i jest stosowane tylko do kodu w bloku.
Zobacz numpy.printoptions
documentation Aby uzyskać szczegółowe informacje na temat Menedżera kontekstu i innych argumentów, które obsługuje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-15 16:08:41
Oto jednorazowy sposób, aby to zrobić, co jest przydatne, jeśli nie chcesz zmieniać ustawień domyślnych:
def fullprint(*args, **kwargs):
from pprint import pprint
import numpy
opt = numpy.get_printoptions()
numpy.set_printoptions(threshold=numpy.inf)
pprint(*args, **kwargs)
numpy.set_printoptions(**opt)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-01 10:38:14
To brzmi jakbyś używał numpy.
W takim przypadku możesz dodać:
import numpy as np
np.set_printoptions(threshold=np.nan)
To wyłączy drukowanie narożników. Aby uzyskać więcej informacji, zobacz ten NumPy Tutorial .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 03:53:14
Używanie menedżera kontekstu jako Paul Price sugggested
import numpy as np
class fullprint:
'context manager for printing full numpy arrays'
def __init__(self, **kwargs):
kwargs.setdefault('threshold', np.inf)
self.opt = kwargs
def __enter__(self):
self._opt = np.get_printoptions()
np.set_printoptions(**self.opt)
def __exit__(self, type, value, traceback):
np.set_printoptions(**self._opt)
if __name__ == '__main__':
a = np.arange(1001)
with fullprint():
print(a)
print(a)
with fullprint(threshold=None, edgeitems=10):
print(a)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-17 13:42:18
numpy.savetxt
numpy.savetxt(sys.stdout, numpy.arange(10000))
Lub jeśli potrzebujesz ciągu:
import StringIO
sio = StringIO.StringIO()
numpy.savetxt(sio, numpy.arange(10000))
s = sio.getvalue()
print s
Domyślny format wyjściowy to:
0.000000000000000000e+00
1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
...
I może być skonfigurowany z kolejnymi argumentami.
Zwróć szczególną uwagę na to, że to również nie pokazuje 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-02 07:01:42
Jest to niewielka modyfikacja (usunięto opcję przekazywania dodatkowych argumentów do set_printoptions)
z neok s answer.
Pokazuje, jak można używać contextlib.contextmanager
aby łatwo utworzyć taki menedżer kontekstowy z mniejszą liczbą wierszy kodu:
import numpy as np
from contextlib import contextmanager
@contextmanager
def show_complete_array():
oldoptions = np.get_printoptions()
np.set_printoptions(threshold=np.inf)
try:
yield
finally:
np.set_printoptions(**oldoptions)
W Twoim kodzie może być użyty tak:
a = np.arange(1001)
print(a) # shows the truncated array
with show_complete_array():
print(a) # shows the complete array
print(a) # shows the truncated array (again)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 06:16:04
Uzupełniając tę odpowiedź od maksymalnej liczby kolumn (ustalonej za pomocą numpy.set_printoptions(threshold=numpy.nan)
), Istnieje również limit znaków, które mają być wyświetlane. W niektórych środowiskach, takich jak wywołanie Pythona z bash (zamiast sesji interaktywnej), można to naprawić, ustawiając parametr linewidth
w następujący sposób.
import numpy as np
np.set_printoptions(linewidth=2000) # default = 75
Mat = np.arange(20000,20150).reshape(2,75) # 150 elements (75 columns)
print(Mat)
W takim przypadku okno powinno ograniczyć liczbę znaków, aby zawinąć linię.
Dla tych, którzy używają wysublimowanego tekstu i chcą zobaczyć efekty wewnątrz w oknie wyjściowym należy dodać opcję build "word_wrap": false
do pliku SUBLIME-build [source ].
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-28 06:34:48
Od NumPy w wersji 1.16, po więcej szczegółów zobacz GitHub ticket 12251 .
from sys import maxsize
from numpy import set_printoptions
set_printoptions(threshold=maxsize)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-22 14:48:13
Mała modyfikacja: (ponieważ zamierzasz wydrukować ogromną listę)
import numpy as np
np.set_printoptions(threshold=np.inf, linewidth=200)
x = np.arange(1000)
print(x)
Zwiększy to liczbę znaków w linii (domyślna szerokość linii 75). Użyj dowolnej wartości, którą lubisz dla linii, która pasuje do Twojego środowiska kodowania. Pozwoli to zaoszczędzić od konieczności przechodzenia przez ogromną liczbę linii wyjściowych, dodając więcej znaków na linię.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-23 08:13:11
Aby go wyłączyć i powrócić do trybu normalnego
np.set_printoptions(threshold=False)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-24 06:12:02
Załóżmy, że masz tablicę numpy
arr = numpy.arange(10000).reshape(250,40)
Jeśli chcesz wydrukować pełną tablicę w Jednorazowy sposób (bez przełączania np.set_printoptions), ale chcesz czegoś prostszego (mniej kodu) niż menedżer kontekstu, po prostu wykonaj
for row in arr:
print row
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-02 18:33:16
Możesz użyć funkcji array2string
- docs .
a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 13:01:41
Nie zawsze będziesz chciał wydrukować wszystkie elementy, szczególnie w przypadku dużych tablic.
Prosty sposób na wyświetlenie większej ilości elementów:
In [349]: ar
Out[349]: array([1, 1, 1, ..., 0, 0, 0])
In [350]: ar[:100]
Out[350]:
array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])
Działa dobrze, gdy domyślnie krojona tablica
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-06 05:35:04
Jeśli masz pandy dostępne,
numpy.arange(10000).reshape(250,40)
print(pandas.DataFrame(a).to_string(header=False, index=False))
Unika efektu ubocznego wymagającego resetu numpy.set_printoptions(threshold=sys.maxsize)
i nie dostajesz numpy.tablica i wsporniki. Uważam, że jest to wygodne do wrzucania szerokiej tablicy do pliku dziennika
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-19 03:45:34
Jeśli używasz Jupyter, spróbuj rozszerzenia Inspektor zmiennej . Możesz kliknąć każdą zmienną, aby zobaczyć całą tablicę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-23 22:39:51
Jeśli używasz notatnika jupytera, uznałem, że jest to najprostsze rozwiązanie dla jednorazowych przypadków. Zasadniczo Konwertuj tablicę numpy na Listę, a następnie na ciąg znaków, a następnie Drukuj. Ta zaleta polega na zatrzymaniu separatorów przecinków w tablicy, podczas gdy użycie numpyp.printoptions(threshold=np.inf)
nie:
import numpy as np
print(str(np.arange(10000).reshape(250,40).tolist()))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-12 22:47:14
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-20 17:36:34
Jeśli tablica jest zbyt duża, aby można ją było wydrukować, NumPy automatycznie pomija centralną część tablicy i drukuje tylko narożniki:
Aby wyłączyć to zachowanie i zmusić NumPy do wydrukowania całej tablicy, możesz zmienić opcje drukowania za pomocą set_printoptions
.
>>> np.set_printoptions(threshold='nan')
lub
>>> np.set_printoptions(edgeitems=3,infstr='inf',
... linewidth=75, nanstr='nan', precision=8,
... suppress=False, threshold=1000, formatter=None)
Możesz również odwołać się do dokumentacji numpy numpy documentation for "or part" for more help.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 20:57:48