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]])
Author: smci, 2010-01-01

21 answers

Użycie numpy.set_printoptions:

import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
 716
Author: Raja Selvaraj,
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.

 243
Author: PaulMag,
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]]
 113
Author: Anoyz,
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.

 84
Author: gerrit,
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)
 41
Author: ZSG,
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 .

 40
Author: Reed Copsey,
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)
 33
Author: neok,
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.

 14
Author: Ciro Santilli TRUMP BAN IS BAD,
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)
 12
Author: MSeifert,
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 ].

 6
Author: Traxidus Wolf,
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)
 5
Author: Velizar VESSELINOV,
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ę.

 5
Author: Gayal Kuruppu,
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)
 4
Author: ewalel,
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 
 2
Author: Mike Wojnowicz,
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]
 1
Author: Szymon Zmilczak,
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

 1
Author: Robin Qiu,
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

 0
Author: Ben,
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ę.

 0
Author: Jason,
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()))
 0
Author: Negative Correlation,
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
with np.printoptions(edgeitems=50):
    print(x)

Zmień 50 na ile linii chcesz zobaczyć

Źródło: tutaj

 0
Author: mustafa candan,
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.

 -1
Author: Arshdeep Singh,
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