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]])
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top