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]])
Verwenden Sie numpy.set_printoptions
:
_import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
_
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.
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]]
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 .
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)
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)
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.
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)
_
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.
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
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.
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)
Zum Ausschalten und Zurückkehren in den normalen Modus
np.set_printoptions(threshold=False)
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]