Ich habe eine verschachtelte Python-Liste, die wie folgt aussieht:
my_list = [[3.74, 5162, 13683628846.64, 12783387559.86, 1.81],
[9.55, 116, 189688622.37, 260332262.0, 1.97],
[2.2, 768, 6004865.13, 5759960.98, 1.21],
[3.74, 4062, 3263822121.39, 3066869087.9, 1.93],
[1.91, 474, 44555062.72, 44555062.72, 0.41],
[5.8, 5006, 8254968918.1, 7446788272.74, 3.25],
[4.5, 7887, 30078971595.46, 27814989471.31, 2.18],
[7.03, 116, 66252511.46, 81109291.0, 1.56],
[6.52, 116, 47674230.76, 57686991.0, 1.43],
[1.85, 623, 3002631.96, 2899484.08, 0.64],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32]]
Ich importiere dann Numpy und setze die Druckoptionen auf (suppress=True)
. Wenn ich ein Array erstelle:
my_array = numpy.array(my_list)
Ich kann für mein Leben die wissenschaftliche Notation nicht unterdrücken:
[[ 3.74000000e+00 5.16200000e+03 1.36836288e+10 1.27833876e+10
1.81000000e+00]
[ 9.55000000e+00 1.16000000e+02 1.89688622e+08 2.60332262e+08
1.97000000e+00]
[ 2.20000000e+00 7.68000000e+02 6.00486513e+06 5.75996098e+06
1.21000000e+00]
[ 3.74000000e+00 4.06200000e+03 3.26382212e+09 3.06686909e+09
1.93000000e+00]
[ 1.91000000e+00 4.74000000e+02 4.45550627e+07 4.45550627e+07
4.10000000e-01]
[ 5.80000000e+00 5.00600000e+03 8.25496892e+09 7.44678827e+09
3.25000000e+00]
[ 4.50000000e+00 7.88700000e+03 3.00789716e+10 2.78149895e+10
2.18000000e+00]
[ 7.03000000e+00 1.16000000e+02 6.62525115e+07 8.11092910e+07
1.56000000e+00]
[ 6.52000000e+00 1.16000000e+02 4.76742308e+07 5.76869910e+07
1.43000000e+00]
[ 1.85000000e+00 6.23000000e+02 3.00263196e+06 2.89948408e+06
6.40000000e-01]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]]
Wenn ich ein einfaches Numpy-Array direkt erstelle:
new_array = numpy.array([1.5, 4.65, 7.845])
Ich habe kein Problem und es wird wie folgt gedruckt:
[ 1.5 4.65 7.845]
Weiß jemand, was mein Problem ist?
numpy.set_printoptions
steuert, wie numpy Arrays gedruckt werden. Es gibt jedoch keine Möglichkeit, die wissenschaftliche Notation vollständig zu unterdrücken. Es wird umgeschaltet, weil Sie Werte zwischen 1e-2 und 1e9 haben. Wenn Sie einen kleineren Bereich haben, wird keine wissenschaftliche Notation verwendet, um diese anzuzeigen. Warum ist es jedoch wichtig, wie sie angezeigtprint
werden? Wenn Sie versuchen, es zu speichern, verwendensavetxt
, etc.Antworten:
Ich denke, was Sie brauchen
np.set_printoptions(suppress=True)
, finden Sie hier: http://pythonquirks.blogspot.fr/2009/10/controlling-printing-in-numpy.htmlEine Dokumentation zu SciPy.org numpy, die alle Funktionsparameter enthält (Unterdrückung wird im obigen Link nicht detailliert beschrieben), finden Sie hier: https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html
quelle
np.set_printoptions(formatter={'all':lambda x: str(x)})
Python Unterdrückt alle exponentiellen Notationen beim Drucken von Numpy-Ndarrays, beim Ausrichten von Wrangle-Text, beim Runden und beim Drucken:
Was folgt, ist eine Erklärung für das, was gerade passiert. Scrollen Sie nach unten, um Code-Demos zu erhalten.
Das Übergeben des Parameters
suppress=True
an die Funktionset_printoptions
funktioniert nur für Zahlen, die in den ihm zugewiesenen Standardbereich von 8 Zeichen passen, wie folgt:Wenn Sie jedoch eine Zahl mit einer Breite von mehr als 8 Zeichen eingeben, wird die Exponentialnotation erneut wie folgt festgelegt:
numpy hat die Wahl, ob Sie Ihre Zahl halbieren, um sie falsch darzustellen, oder ob Sie eine exponentielle Notation erzwingen möchten. Sie wählen letztere.
Hier kommt
set_printoptions(formatter=...)
die Rettung, um Optionen zum Drucken und Runden festzulegen. Sagen Sieset_printoptions
, Sie sollen nur einen nackten Schwimmer drucken:Wir haben die Exponentialschreibweise zwangsweise unterdrückt, sie ist jedoch nicht gerundet oder gerechtfertigt. Geben Sie daher zusätzliche Formatierungsoptionen an:
Der Nachteil bei der Kraftunterdrückung aller exponentiellen Vorstellungen in ndarrays besteht darin, dass, wenn Ihr ndarray einen riesigen Float-Wert nahe der Unendlichkeit aufweist und Sie ihn drucken, Sie mit einer Seite voller Zahlen ins Gesicht gesprengt werden.
Vollständiges Beispiel Demo 1:
Drucke:
Vollständiges Beispiel Demo 2:
Drucke:
Beachten Sie, dass die Rundung mit einer Genauigkeit von 2 Einheiten konsistent ist und die Exponentialschreibweise sowohl im sehr großen
e+x
als auch im sehr kleinene-x
Bereich unterdrückt wird .quelle
Für 1D- und 2D-Arrays können Sie np.savetxt verwenden, um mit einer bestimmten Formatzeichenfolge zu drucken:
Ihre Optionen mit numpy.set_printoptions oder numpy.array2string in Version 1.3 sind ziemlich klobig und begrenzt (zum Beispiel keine Möglichkeit, die wissenschaftliche Notation für große Zahlen zu unterdrücken). Es sieht so aus, als würde sich dies mit zukünftigen Versionen ändern, mit numpy.set_printoptions (formatter = ..) und numpy.array2string (style = ..).
quelle
Sie könnten eine Funktion schreiben, die eine wissenschaftliche Notation in eine reguläre umwandelt, so etwas wie
quelle