Hallo,
wie kann man eine solche Matrix V=[0.99998686753953003, 7.2599706140000003e-007, 0.0051249144334400004, 4.6075384730000003e-005, 0.99995830130755003, -0.0091320054296999999]') auf drei Stelle nach dem Komma runden?
Danke im Voraus!
Bugsy!
Runden einer Matrix
Ich weiß zwar nicht, ob man Matrizen irgendwie anders rundet,... aber:
Wunder dich nicht, die einzelne Bestandteile sind gerundet, lediglich die Repräsentation intern ist anders, deswegen siehts so ungerundet aus:
Code: Alles auswählen
In [5]: v = [0.99998686753953003, 7.2599706140000003e-007, 0.0051249144334400004
, 4.6075384730000003e-005, 0.99995830130755003, -0.0091320054296999999]
In [6]: [round(i, 3) for i in v]
Out[6]: [1.0, 0.0, 0.0050000000000000001, 0.0, 1.0, -0.0089999999999999993]
Code: Alles auswählen
In [7]: for i in [round(i, 3) for i in v]:
...: print i
...:
...:
1.0
0.0
0.005
0.0
1.0
-0.009
Hallo und willkommen im Forum,
Die Antwort ist: Gar nicht. Das hat was mit Fließkommazahlen und ihrer Darstellung im Rechner zu tun. Je nach Anwendung kannst Du die Ausgabe runden oder auf das decimal-Modul ausweichen.
HTH
Christian
edit: Zu spät
Die Antwort ist: Gar nicht. Das hat was mit Fließkommazahlen und ihrer Darstellung im Rechner zu tun. Je nach Anwendung kannst Du die Ausgabe runden oder auf das decimal-Modul ausweichen.
HTH
Christian
edit: Zu spät
Was hindert dich denn daran'ne neue Zuweisung zu machen?bugsy25 hat geschrieben:Genauso will ich es haben!
kann man das Ergebnis in einer neuen Matrix schreiben?
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
... falls früher oder später numpy in's Spiel kommt: es gibt natürlich numpy.round(), was genauso funktioniert, wie erwartet:
Vorsicht: numpy.array.__repr__ lässt es besser aussehen als es ist, das sind ja nach wie vor Gleitkommazahlen.
hth, Jörg
Code: Alles auswählen
In [2]: V=[0.99998686753953003, 7.2599706140000003e-007,
0.0051249144334400004, 4.6075384730000003e-005,
0.99995830130755003, -0.0091320054296999999]
In [4]: a = numpy.array(V)
In [5]: a
Out[5]:
array([ 9.99986868e-01, 7.25997061e-07, 5.12491443e-03,
4.60753847e-05, 9.99958301e-01, -9.13200543e-03])
In [6]: numpy.round(a,3)
Out[6]: array([ 1. , 0. , 0.005, 0. , 1. , -0.009])
hth, Jörg
Es klappt nicht mit einer neuen Zuweisung!BlackVivi hat geschrieben:Was hindert dich denn daran'ne neue Zuweisung zu machen?bugsy25 hat geschrieben:Genauso will ich es haben!
kann man das Ergebnis in einer neuen Matrix schreiben?
kann man nicht array und die Klammer weglassen?b.esser-wisser hat geschrieben:... falls früher oder später numpy in's Spiel kommt: es gibt natürlich numpy.round(), was genauso funktioniert, wie erwartet:Vorsicht: numpy.array.__repr__ lässt es besser aussehen als es ist, das sind ja nach wie vor Gleitkommazahlen.Code: Alles auswählen
In [2]: V=[0.99998686753953003, 7.2599706140000003e-007, 0.0051249144334400004, 4.6075384730000003e-005, 0.99995830130755003, -0.0091320054296999999] In [4]: a = numpy.array(V) In [5]: a Out[5]: array([ 9.99986868e-01, 7.25997061e-07, 5.12491443e-03, 4.60753847e-05, 9.99958301e-01, -9.13200543e-03]) In [6]: numpy.round(a,3) Out[6]: array([ 1. , 0. , 0.005, 0. , 1. , -0.009])
hth, Jörg
@bugsy25: Was nach ``Out[]:`` steht ist die *Ausgabe* des Python-Interpreters. So sehen `numpy.array`-Objekte nun einmal aus, wenn man sie mit `repr()` in eine Zeichenkette umwandelt.
Allerdings müsste man es auch wieder so eingeben, wenn man ein `numpy.array` haben möchte. Sonst wäre es ja nur eine Liste.
Allerdings müsste man es auch wieder so eingeben, wenn man ein `numpy.array` haben möchte. Sonst wäre es ja nur eine Liste.
Ich möchte eine Liste mit den gerundeten Werten haben.BlackJack hat geschrieben:@bugsy25: Was nach ``Out[]:`` steht ist die *Ausgabe* des Python-Interpreters. So sehen `numpy.array`-Objekte nun einmal aus, wenn man sie mit `repr()` in eine Zeichenkette umwandelt.
Allerdings müsste man es auch wieder so eingeben, wenn man ein `numpy.array` haben möchte. Sonst wäre es ja nur eine Liste.
Das build-in round und das numpy.round sind +/- equivalent - jedenfalls für Deine Zwecke. Wenn Du mit Listen arbeiten willst, kannst Du das machen, wie es BlackVivi gezeigt hat. Aber nochmal deutlicher: Willst Du *wirklich* die Werte in der Liste runden oder doch lieber die Ausgabe? Lies Dir diesbezüglich mal den ersten Link durch, den ich gegeben habe.bugsy25 hat geschrieben:Ich möchte eine Liste mit den gerundeten Werten haben.
Ich will die Werte in der Liste runden!!!!Damit will ich was anders machen!!!CM hat geschrieben:Das build-in round und das numpy.round sind +/- equivalent - jedenfalls für Deine Zwecke. Wenn Du mit Listen arbeiten willst, kannst Du das machen, wie es BlackVivi gezeigt hat. Aber nochmal deutlicher: Willst Du *wirklich* die Werte in der Liste runden oder doch lieber die Ausgabe? Lies Dir diesbezüglich mal den ersten Link durch, den ich gegeben habe.bugsy25 hat geschrieben:Ich möchte eine Liste mit den gerundeten Werten haben.
BlackVivi's Methose ist schon ok aber die Werte sollen wieder in einem neuen Liste eingefügt werden.
@bugsy25: BlackVivi zeigt doch wie man mit einer "list comprehension" eine Liste mit den gerundeten Werten erzeugt. Und wenn Dir die `round()`-Funktion als Information nicht ausreicht notfalls selber eine Schleife zu schreiben, die eine Liste mit den gerundeten Werten erzeugt, dann solltest Du ein Tutorial durcharbeiten um Python-Grundlagen zu lernen. Zum Beispiel das in der Python-Dokumentation.
Es wird doch eine neue Liste erstellt. Oder suchst du so etwas:bugsy25 hat geschrieben:BlackVivi's Methose ist schon ok aber die Werte sollen wieder in einem neuen Liste eingefügt werden.
Code: Alles auswählen
alte_liste[:] = [round(i, 3) for i in v]
Das Leben ist wie ein Tennisball.
Ich bin nicht schwerhörig!bugsy25 hat geschrieben:Ich will die Werte in der Liste runden!!!!Damit will ich was anders machen!!!
Das ist aber genau, was ich befürchtete. Ich kann nicht umhin zu denken:
- Da will jemand mit einer Matrix rechnen und hat Fließkommazahlen.
- Ggf. wird das Teil eines größeren Programms bzw. gehört zu den ersten Schritten, bei denen man sich nicht solch *falsch* Herangehensweisen aneignen sollte.
Das Problem ist Folgendes: Wenn Du Zwischenschritte rundest, provozierst Du einen zusätzlichen systematischen (!) Fehler. Der pflanzt sich fort. In der numerischen Programmierung gilt als Faustregel: Immer mit der größten Genauigkeit rechnen und erst am Schluß, bei der Ausgabe, runden. Wie Du es damit hälst ist Deine Sache!
Wer hindert Dich die list comprehension einem neuen Namen zuzuweisen?bugsy25 hat geschrieben:BlackVivi's Methose ist schon ok aber die Werte sollen wieder in einem neuen Liste eingefügt werden.
Gruß,
Christian