Jak wydrukować pełną tablicę NumPy?

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]])

13 answers

Aby wyjaśnić odpowiedź Reeda

import numpy
numpy.set_printoptions(threshold=numpy.nan)

Zwróć uwagę, że powyższa odpowiedź działa z inicjałem from numpy import *, co nie jest wskazane. To również działa dla mnie:

numpy.set_printoptions(threshold='nan')

Pełna dokumentacja znajduje się w http://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html .

 373
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
2018-03-19 20:59:39
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.

 151
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]]
 43
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

To brzmi jakbyś używał numpy.

W takim przypadku możesz dodać:

import numpy as np
np.set_printoptions(threshold='nan')

To wyłączy drukowanie narożników. Aby uzyskać więcej informacji, zobacz ten NumPy Tutorial .

 36
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
2017-10-20 16:26:16

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='nan')
  pprint(*args, **kwargs)
  numpy.set_printoptions(**opt)
 29
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
2014-09-14 18:19:46

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):
        if 'threshold' not in kwargs:
            kwargs['threshold'] = np.nan
        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)

a = np.arange(1001)

with fullprint():
    print(a)

print(a)

with fullprint(threshold=None, edgeitems=10):
    print(a)
 20
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
2017-05-23 12:34:44

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.

Testowane na Pythonie 2.7.12, numpy 1.11.1.

 9
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
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
2017-11-07 16:59:51

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)
 7
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

Dla tych, którzy lubią importować jako np:

import numpy as np
np.set_printoptions(threshold=np.nan)

Będzie również działać

 6
Author: MrG,
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
2017-06-06 01:49:26

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

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 
 0
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]
 0
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

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 ].

 0
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