Wie die volle NumPy Array drucken, ohne Abschneiden?
-
22-09-2019 - |
Frage
Wenn ich einen numpy Array drucken, erhalte ich eine verkürzte Darstellung, aber ich mag die ganze Palette.
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]])
Lösung
Verwenden Sie numpy.set_printoptions
:
import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
Andere Tipps
import numpy as np
np.set_printoptions(threshold=np.inf)
Ich schlage vor, mit np.inf
statt np.nan
, die von anderen vorgeschlagen wird. Beide arbeiten für Ihren Zweck, sondern indem die Schwelle auf „unendlich“ -Einstellung ist es offensichtlich für jedermann zu lesen Code, was Sie meinen. einen Schwellenwert von „keine Zahl“ scheint ein wenig vage mir haben.
Die bisherigen Antworten die richtigen sind, sondern als eine schwächere Alternative können 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 klingt wie Sie verwenden numpy.
Wenn das der Fall ist, können Sie hinzufügen:
import numpy as np
np.set_printoptions(threshold=np.nan)
Das wird die Ecke Druck deaktivieren. Weitere Informationen finden Sie, diese NumPy Tutorial .
Hier ist eine einmalige Art und Weise, dies zu tun, was nützlich ist, wenn Sie wollen nicht Ihre Standardeinstellungen ändern:
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)
Mit einem Kontext-Manager als 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)
a = np.arange(1001)
with fullprint():
print(a)
print(a)
with fullprint(threshold=None, edgeitems=10):
print(a)
NumPy 1.15 oder neuer
Wenn Sie NumPy 1,15 (veröffentlicht 2018.07.23) oder höher, können Sie den printoptions
Kontext-Manager verwenden:
with numpy.printoptions(threshold=numpy.inf):
print(arr)
(natürlich ersetzen numpy
durch np
wenn das ist, wie Sie importierte numpy
)
Die Verwendung eines Kontext-Manager (der with
-Block) stellt sicher, dass nach dem Kontext-Manager beendet ist, werden die Druckoptionen zurückzukehren, was auch immer sie waren, bevor der Block gestartet. Es sorgt für die Einstellung nur temporär ist, und nur für Code innerhalb des Blocks angewendet wird.
Siehe numpy.printoptions
Dokumentation auf dem Kontextmanager Details und was andere Argumente unterstützt wird.
numpy.savetxt
numpy.savetxt(sys.stdout, numpy.arange(10000))
oder wenn Sie eine Zeichenfolge:
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, wie diese nicht auch die eckigen Klammern zeigt, und ermöglicht eine viel Anpassung, wie erwähnt unter: Wie ein numpy Array ohne Klammern drucken?
Getestet auf Python 2.7.12, numpy 1.11.1.
Dies ist eine leichte Modifikation ist (die Option entfernt, um zusätzliche Argumente zu übergeben set_printoptions)
of neok s Antwort.
Es zeigt, wie Sie verwenden können, contextlib.contextmanager
leicht eine solche erstellen contextmanager mit weniger Codezeilen:
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 wie folgt 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)
Als Ergänzung zu dieser Antwort von der maximalen Anzahl der Spalten (mit numpy.set_printoptions(threshold=numpy.nan)
fest), gibt es auch eine Grenze von Zeichen Angezeigt werden. In einigen Umgebungen wie wenn Python von bash aufrufen (und nicht die interaktive Sitzung), kann dies durch Setzen des Parameters linewidth
wie folgt festgelegt werden.
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 Ihre Fenster, um die Anzahl der Zeichen, sollten die Zeile erscheinen.
Für diejenigen da draußen mit erhabenem Text und wollten Ergebnisse im Ausgabefenster, um zu sehen, sollen Sie den Build-Option "word_wrap": false
zur Erhabenen-Build-Datei [ Quelle ].
Zum Ausschalten und Rückkehr in den normalen Modus
np.set_printoptions(threshold=False)
Angenommen, Sie haben eine numpy Array
arr = numpy.arange(10000).reshape(250,40)
Wenn Sie das vollständige Array in einer einmaligen Art und Weise (ohne Makeln np.set_printoptions) drucken möchten, wollen aber etwas einfacher (weniger Code) als Kontext-Manager, tun nur
for row in arr:
print row
Sie können die array2string
Funktion - docs .
a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]
Da NumPy Version 1.16, um weitere Informationen finden Sie unter GitHub Ticket 12251 .
from sys import maxsize
from numpy import set_printoptions
set_printoptions(threshold=maxsize)
Sie wollen nicht immer alle Artikel gedruckt, vor allem für große Arrays.
Eine einfache Möglichkeit, mehr Objekte zu zeigen:
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 gut, wenn in Scheiben geschnitten Array <1000 standardmäßig aktiviert.
Wenn ein Array zu groß ist, gedruckt zu werden, überspringt NumPy automatisch den zentralen Teil des Arrays und druckt nur die Ecken:
Um dieses Verhalten zu deaktivieren und zwingen NumPy das gesamte Array zu drucken, können Sie die Druckoptionen ändern set_printoptions
verwendet wird.
>>> np.set_printoptions(threshold='nan')
oder
>>> np.set_printoptions(edgeitems=3,infstr='inf',
... linewidth=75, nanstr='nan', precision=8,
... suppress=False, threshold=1000, formatter=None)
Sie können auch auf die verweisen numpy Dokumentation numpy Dokumentation "oder Teil" für mehr Hilfe.