Wenn ich ein numpy-Array drucke, erhalte ich eine abgeschnittene Darstellung, aber ich möchte das vollständige 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]])
np.inf
?np.nan
und'nan'
funktionieren nur per Zufall und'nan'
nicht einmal in Python 3, da sie die Vergleichsimplementierungthreshold='nan'
vom gemischten Typ geändert haben, die davon abhängt.threshold=np.nan
anstatt'nan'
von einem anderen Zufall abzuhängen, dh, dass die Array-Drucklogik die Array-Größe mit dem Schwellenwert vergleichta.size > _summaryThreshold
. Dies gibt immerFalse
für zurück_summaryThreshold=np.nan
. Wenn der Vergleich gewesen wärea.size <= _summaryThreshold
, testen Sie, ob das Array vollständig gedruckt werden sollte, anstatt zu testen, ob es sollte Zusammenfassend würde dieser Schwellenwert eine Zusammenfassung für alle Arrays auslösen.)tmp
geradelist(tmp)
. Andere Optionen mit unterschiedlicher Formatierung sindtmp.tolist()
oder für mehr Kontrolleprint("\n".join(str(x) for x in tmp))
.Antworten:
Verwendung
numpy.set_printoptions
:quelle
numpy
Array nur einmal drucken möchten , hat diese Lösung leider den Nachteil, dass Sie diese Konfigurationsänderung nach dem Drucken zurücksetzen müssen.Ich schlage vor,
np.inf
stattdessen zu verwenden,np.nan
was von anderen vorgeschlagen wird. Beide arbeiten 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, scheint mir ein wenig vage zu sein.quelle
np.set_printoptions(threshold=1000)
wird das Standardverhalten wiederhergestellt . Sie können diesen Schwellenwert jedoch so niedrig oder hoch einstellen, wie Sie möchten.np.set_printoptions(threshold=np.inf)
Ändert einfach die maximale Größe eines gedruckten Arrays, bevor es auf unendlich abgeschnitten wird, sodass es niemals abgeschnitten wird, egal wie groß es ist. Wenn Sie den Schwellenwert auf eine reelle Zahl einstellen, ist dies die maximale Größe.np.inf
,np.nan
oder'nan'
. Was auch immer Sie dort ablegen, NumPy verwendet weiterhin eine Ebene>
, um die Größe des Arrays mit Ihrem Schwellenwert zu vergleichen.np.nan
funktioniert nur, weil esa.size > _summaryThreshold
statt ista.size <= _summaryThreshold
, undnp.nan
gibtFalse
für alle>
/<
/>=
/<=
Vergleiche zurück.'nan'
funktioniert nur aufgrund fragiler Implementierungsdetails der gemischten Vergleichslogik von Python 2; es bricht vollständig auf Python 3.np.get_printoptions()['threshold']
. Sie können diesen Wert speichern, bevor Sie den Schwellenwert festlegen, und ihn anschließend wiederherstellen (oder einenwith
Block verwenden, wie in anderen Antworten vorgeschlagen).Die vorherigen Antworten sind die richtigen, aber als schwächere Alternative können Sie sie in eine Liste umwandeln:
quelle
NumPy 1.15 oder neuer
Wenn Sie NumPy 1.15 (veröffentlicht am 23.07.2018) oder neuer verwenden, können Sie den
printoptions
Kontextmanager verwenden:(Ersetzen Sie natürlich
numpy
durch,np
wenn Sie so importiert habennumpy
)Durch die Verwendung eines Kontextmanagers (des
with
Blocks) wird sichergestellt, dass die Druckoptionen nach Abschluss des Kontextmanagers auf den Stand vor dem Start des Blocks zurückgesetzt werden. Es stellt sicher, dass die Einstellung nur vorübergehend ist und nur auf Code innerhalb des Blocks angewendet wird.Weitere Informationen zum Kontextmanager und zu den anderen unterstützten Argumenten finden Sie in der
numpy.printoptions
Dokumentation .quelle
Das klingt so, als würden Sie Numpy verwenden.
Wenn dies der Fall ist, können Sie hinzufügen:
Dadurch wird der Eckendruck deaktiviert. Weitere Informationen finden Sie in diesem NumPy-Tutorial .
quelle
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Hier ist eine einmalige Möglichkeit, die nützlich ist, wenn Sie Ihre Standardeinstellungen nicht ändern möchten:
quelle
'nan'
,np.nan
oder eine der oben genannten. Es wird nicht unterstützt, und dieser schlechte Rat verursacht Schmerzen für Menschen, die auf Python 3 umsteigennumpy.set_printoptions(threshold=numpy.inf)
Verwendung eines Kontextmanagers, wie von Paul Price vorgeschlagen
quelle
np.printoptions
numpy.savetxt
oder wenn Sie eine Zeichenfolge benötigen:
Das Standardausgabeformat ist:
und es kann mit weiteren Argumenten konfiguriert werden.
Beachten Sie insbesondere, dass dies auch die eckigen Klammern nicht anzeigt und viele Anpassungen ermöglicht, wie unter: Wie drucke ich ein Numpy-Array ohne Klammern?
Getestet auf Python 2.7.12, numpy 1.11.1.
quelle
Dies ist eine geringfügige Änderung (die Option, zusätzliche Argumente an die Antwort
set_printoptions)
von neok zu übergeben , wurde entfernt.Es zeigt, wie Sie
contextlib.contextmanager
auf einfache Weise einen solchen Kontextmanager mit weniger Codezeilen erstellen können:In Ihrem Code kann es folgendermaßen verwendet werden:
quelle
try
/finally
um dasyield
in einen Kontextmanager setzen, damit die Bereinigung egal was passiert.with np.printoptions(threshold=np.inf):
Ergänzend zu dieser Antwort aus 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 Bash (anstelle der interaktiven Sitzung), kann dies behoben werden, indem der Parameterlinewidth
wie folgt festgelegt wird.In diesem Fall sollte Ihr Fenster die Anzahl der Zeichen zum Umbrechen der Zeile begrenzen.
Für diejenigen, die erhabenen Text verwenden und Ergebnisse im Ausgabefenster sehen möchten, sollten Sie die Erstellungsoption
"word_wrap": false
zur erhabenen Erstellungsdatei [ Quelle ] hinzufügen .quelle
Seit NumPy Version 1.16 finden Sie weitere Informationen unter GitHub Ticket 12251 .
quelle
Zum Ausschalten und Zurückkehren zum normalen Modus
quelle
threshold=0
, was bedeutet "so schnell wie möglich abschneiden" - nicht das, was Sie überhaupt wollen.Angenommen, Sie haben ein Numpy-Array
Wenn Sie das gesamte Array einmalig drucken möchten (ohne np.set_printoptions umzuschalten), aber etwas Einfacheres (weniger Code) als den Kontextmanager wünschen, tun Sie dies einfach
quelle
Eine kleine Änderung: (da Sie eine riesige Liste drucken werden)
Dies erhöht die Anzahl der Zeichen pro Zeile (Standardzeilenbreite von 75). Verwenden Sie einen beliebigen Wert für die Linienbreite, die zu Ihrer Codierungsumgebung passt. Dies erspart Ihnen das Durchlaufen einer großen Anzahl von Ausgabezeilen, indem Sie mehr Zeichen pro Zeile hinzufügen.
quelle
Sie können die
array2string
Funktion - docs verwenden .quelle
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Sie möchten nicht immer, dass alle Elemente gedruckt werden, insbesondere bei großen Arrays.
Eine einfache Möglichkeit, weitere Elemente anzuzeigen:
Es funktioniert einwandfrei, wenn das Array standardmäßig <1000 ist.
quelle
Wenn Sie Pandas zur Verfügung haben,
vermeidet den Nebeneffekt des Zurücksetzens von
numpy.set_printoptions(threshold=sys.maxsize)
und Sie erhalten nicht das numpy.array und die Klammern. Ich finde das praktisch, um ein breites Array in eine Protokolldatei zu kopierenquelle
Wenn ein Array zu groß zum Drucken ist, überspringt NumPy automatisch den zentralen Teil des Arrays und druckt nur die Ecken: Um dieses Verhalten zu deaktivieren und NumPy zum Drucken des gesamten Arrays zu zwingen, können Sie die Druckoptionen mithilfe von ändern
set_printoptions
.oder
Weitere Hilfe finden Sie auch in der numpy-Dokumentation numpy-Dokumentation für "oder Teil" .
quelle
'nan'
,np.nan
oder eine der oben genannten. Es wird nicht unterstützt, und dieser schlechte Rat verursacht Schmerzen für Menschen, die auf Python 3 umsteigenValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation