Ich bin gespannt, ob es eine Möglichkeit gibt, formatiert zu drucken numpy.arrays
, z. B. auf ähnliche Weise:
x = 1.23456
print '%.3f' % x
Wenn ich numpy.array
Floats drucken möchte, werden mehrere Dezimalstellen gedruckt , häufig im "wissenschaftlichen" Format, das selbst für niedrigdimensionale Arrays schwer zu lesen ist. Muss aber numpy.array
anscheinend als String gedruckt werden, dh mit %s
. Gibt es dafür eine Lösung?
python
numpy
python-2.x
pretty-print
Camillio
quelle
quelle
Antworten:
Sie können verwenden
set_printoptions
, um die Genauigkeit der Ausgabe festzulegen:Und
suppress
unterdrückt die Verwendung der wissenschaftlichen Notation für kleine Zahlen:Weitere Optionen finden Sie in den Dokumenten zu set_printoptions .
Um Druckoptionen lokal mit NumPy 1.15.0 oder höher anzuwenden, können Sie den Kontextmanager numpy.printoptions verwenden . Zum Beispiel sind innerhalb der
with-suite
precision=3
undsuppress=True
gesetzt:Außerhalb der
with-suite
Druckoptionen werden jedoch die Standardeinstellungen wiederhergestellt:Wenn Sie eine frühere Version von NumPy verwenden, können Sie den Kontextmanager selbst erstellen. Zum Beispiel,
So verhindern Sie, dass Nullen vom Ende der Floats entfernt werden:
np.set_printoptions
hat jetzt einenformatter
Parameter, mit dem Sie eine Formatfunktion für jeden Typ angeben können.welche druckt
anstatt
quelle
print
, aber Sie können einen Kontextmanager verwenden, um etwas Ähnliches zu erstellen . Ich habe den obigen Beitrag bearbeitet, um zu zeigen, was ich meine.np.set_printoptions(precision=3)
unterdrücken die Endnullen. Wie bringen Sie sie dazu, so angezeigt zu werden[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
wenn Sie eine Zeichenfolgendarstellung möchten und nicht unbedingt verwenden möchtenprint
. Sie können einfach__str__()
die numpy-Array-Instanz aufrufen und erhalten die formatierte Zeichenfolge gemäß den von Ihnen festgelegten Druckoptionen.Eine Teilmenge der
np.set_printoptions
Funktionalität erhalten Sie von dernp.array_str
Befehl abrufen, der nur für eine einzelne Druckanweisung gilt.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Zum Beispiel:
quelle
Unutbu gab eine wirklich vollständige Antwort (sie haben auch eine +1 von mir bekommen), aber hier ist eine Lo-Tech-Alternative:
Als Funktion (unter Verwendung der
format()
Syntax zur Formatierung):Verwendungszweck:
Auf den Index des Arrays kann in der Formatzeichenfolge zugegriffen werden:
quelle
FYI Numpy 1.15 (Veröffentlichungsdatum steht noch aus) enthält einen Kontextmanager zum lokalen Festlegen von Druckoptionen . Dies bedeutet, dass das Folgende genauso funktioniert wie das entsprechende Beispiel in der akzeptierten Antwort (von unutbu und Neil G), ohne dass Sie Ihren eigenen Kontextmanager schreiben müssen. ZB am Beispiel:
quelle
Das Juwel, das es allzu einfach macht, das Ergebnis als Zeichenfolge zu erhalten (in den heutigen Numpy-Versionen), ist in der Antwort von denis verborgen:
np.array2string
quelle
Jahre später ist ein anderer unten. Aber für den täglichen Gebrauch habe ich nur
quelle
Und hier ist, was ich benutze, und es ist ziemlich unkompliziert:
quelle
War überrascht, die
around
erwähnte Methode nicht zu sehen - bedeutet kein Durcheinander mit den Druckoptionen.quelle
Ich möchte oft, dass verschiedene Spalten unterschiedliche Formate haben. So drucke ich ein einfaches 2D-Array unter Verwendung einer Vielzahl von Formatierungen, indem ich mein NumPy-Array in ein Tupel konvertiere:
quelle
numpy.char.mod
kann auch nützlich sein, abhängig von den Details Ihrer Anwendung, z. B.:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
Gibt ein String-Array mit den Elementen "Wert = 5,00", "Wert = 5,10" usw. zurück (als etwas erfundenes Beispiel).quelle
Die Numpy-Arrays haben die Methode,
round(precision)
die ein neues Numpy-Array mit entsprechend gerundeten Elementen zurückgibt.quelle
Ich finde, dass das übliche Float-Format {: 9.5f} ordnungsgemäß funktioniert - das Unterdrücken von E-Notationen mit kleinen Werten -, wenn eine Liste oder ein Array mithilfe einer Schleife angezeigt wird. Dieses Format unterdrückt jedoch manchmal nicht seine E-Notation, wenn ein Formatierer mehrere Elemente in einer einzigen Druckanweisung enthält. Zum Beispiel:
Meine Ergebnisse zeigen den Fehler in den Fällen 4, 5 und 6:
Ich habe keine Erklärung dafür und verwende daher immer eine Schleife für die Floating-Ausgabe mehrerer Werte.
quelle
ich benutze
Es ist nicht schwierig, es für mehrdimensionale Arrays zu modifizieren.
quelle
Eine weitere Option ist die Verwendung des
decimal
Moduls:quelle