it-swarm.com.de

Wie drucke ich das gesamte NumPy-Array ohne Kürzung?

Wenn ich ein numpy-Array drucke, erhalte ich eine abgeschnittene Darstellung, aber ich möchte das gesamte Array.

Gibt es eine Möglichkeit, dies zu tun?

Beispiele:

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

Verwenden Sie numpy.set_printoptions :

_import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
_
498
Raja Selvaraj
import numpy as np
np.set_printoptions(threshold=np.inf)

Ich schlage vor, np.inf anstelle von np.nan zu verwenden, was von anderen vorgeschlagen wird. Beide funktionieren für Ihren Zweck, aber wenn Sie den Schwellenwert auf "unendlich" setzen, ist es für jeden, der Ihren Code liest, offensichtlich, was Sie meinen. Eine Schwelle von "keine Zahl" zu haben, erscheint mir ein wenig vage.

192
PaulMag

Die vorherigen Antworten sind die richtigen, aber als schwächere Alternative können Sie sie in eine Liste umwandeln:

>>> 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]]
66
Anoyz

Das hört sich so an, als würdest du Numpy benutzen.

In diesem Fall können Sie Folgendes hinzufügen:

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

Dadurch wird der Eckendruck deaktiviert. Weitere Informationen finden Sie in diesem NumPy Tutorial .

42
Reed Copsey

Hier ist eine einmalige Möglichkeit, dies zu tun, die nützlich ist, wenn Sie Ihre Standardeinstellungen nicht ändern möchten:

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

Verwendung eines Kontextmanagers als Paul Price vorgeschlagen

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)

a = np.arange(1001)

with fullprint():
    print(a)

print(a)

with fullprint(threshold=None, edgeitems=10):
    print(a)
27
neok

NumPy 1.15 oder neuer

Wenn Sie NumPy 1.15 (veröffentlicht am 23.07.2018) oder neuer verwenden, können Sie den Kontextmanager printoptions verwenden:

with numpy.printoptions(threshold=numpy.inf):
    print(arr)

(Ersetzen Sie numpy durch np, wenn Sie numpy so importiert haben.)

Durch die Verwendung eines Kontextmanagers (des Blocks with) wird sichergestellt, dass die Druckoptionen nach Abschluss des Kontextmanagers auf den Stand vor dem Blockstart zurückgesetzt werden. Es stellt sicher, dass die Einstellung temporär ist und nur auf Code innerhalb des Blocks angewendet wird.

Siehe numpy.printoptions Dokumentation für Details zum Kontextmanager und welche anderen Argumente er unterstützt.

23
gerrit

numpy.savetxt

_numpy.savetxt(sys.stdout, numpy.arange(10000))
_

oder wenn du einen string brauchst:

_import StringIO
sio = StringIO.StringIO()
numpy.savetxt(sio, numpy.arange(10000))
s = sio.getvalue()
print s
_

Das Standardausgabeformat ist:

_0.000000000000000000e+00
1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
...
_

und es kann mit weiteren Argumenten konfiguriert werden.

Beachten Sie insbesondere, dass hier auch die eckigen Klammern nicht angezeigt werden und viele Anpassungen möglich sind, wie unter: So drucken Sie ein Numpy-Array ohne Klammern?

Getestet auf Python 2.7.12, numpy 1.11.1.

Dies ist eine geringfügige Änderung (die Option, zusätzliche Argumente an _set_printoptions)_ von neok s Antwort zu übergeben, wurde entfernt.

Es zeigt, wie Sie contextlib.contextmanager verwenden können, um auf einfache Weise einen solchen Kontextmanager mit weniger Codezeilen zu erstellen:

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

In Ihrem Code kann es so verwendet werden:

_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)
_
10
MSeifert

Ergänzend zu Antwort von der maximalen Anzahl von Spalten (festgelegt mit numpy.set_printoptions(threshold=numpy.nan)) gibt es auch eine Begrenzung der anzuzeigenden Zeichen. In einigen Umgebungen, z. B. beim Aufrufen von python aus der Bash (anstelle der interaktiven Sitzung), kann dies behoben werden, indem der Parameter linewidth wie folgt eingestellt wird.

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)

In diesem Fall sollte Ihr Fenster die Anzahl der Zeichen für den Zeilenumbruch begrenzen.

Für diejenigen, die sublimen Text verwenden und Ergebnisse im Ausgabefenster sehen möchten, sollten Sie die Erstellungsoption "Word_wrap": false zur sublimen Erstellungsdatei [ source ] hinzufügen.

6
Traxidus Wolf

Angenommen, Sie haben ein numpy-Array

 arr = numpy.arange(10000).reshape(250,40)

Wenn Sie das gesamte Array einmalig drucken möchten (ohne np.set_printoptions umzuschalten), aber etwas Einfacheres (weniger Code) als den Kontext-Manager möchten, tun Sie dies einfach

for row in arr:
     print row 
2
Mike Wojnowicz

Sie werden nicht immer alle Artikel drucken wollen, insbesondere bei großen Arrays.

Eine einfache Möglichkeit, mehr Artikel anzuzeigen:

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

Es funktioniert einwandfrei, wenn das aufgeteilte Array standardmäßig <1000 ist.

1
Robin Qiu

Seit NumPy Version 1.16 finden Sie weitere Informationen unter GitHub-Ticket 12251 .

from sys import maxsize
from numpy import set_printoptions

set_printoptions(threshold=maxsize)
1

Zum Ausschalten und Zurückkehren in den normalen Modus

np.set_printoptions(threshold=False)
1
ewalel

Sie können die Funktion array2string - docs verwenden.

a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]
1
Szymon Zmilczak