Konvertieren Liste oder numpy-array aus single-element auf float in python
Ich habe eine Funktion, die die Annahme kann entweder eine Liste oder ein numpy-array.
In jedem Fall, die Liste/array hat ein element (immer). Ich muss nur return float.
So, z.B., die ich empfangen konnte:
list_ = [4]
oder die numpy-array:
array_ = array([4])
Und ich zurückkehren sollte,
4.0
So, natürlich (würde ich sagen), ich benutze float(...) auf list_ und erhalten:
TypeError: float() argument must be a string or a number
Ich das gleiche tun, um array_ und dieses mal hat es funktioniert, indem Sie darauf mit "4.0". Von diesem habe ich erfahren, dass Python-Liste konvertiert werden kann, zu schweben diese Weise.
Basierend auf dem Erfolg mit den numpy-array Konvertierung nach float diese führen mich zu der Fragestellung:
float(np.asarray(list_))
- Und dies funktioniert, wenn list_ ist sowohl eine Python-Liste und wenn es ein numpy-array.
Frage
Aber wie es scheint, hat dieser Ansatz einen overhead-zuerst die Umwandlung der Liste in ein numpy-array und dann zu schweben. Grundsätzlich: gibt es einen besseren Weg, dies zu tun?
- Können Sie nicht verwenden, schneiden: float(list_[0]) = 4.0
- entweder
float(list_[0])
oderfloat(''.join(list_))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur Zugriff auf das erste Element der Liste/array über den index zugreifen und den index 0:
Diese
int
da war das, was Sie eingesetzt in den ersten Platz. Wenn Sie es brauchen, um ein float aus irgendeinem Grund, können Sie rufen Siefloat()
dann drauf:Den Sie verwenden möchten, können Sie die
ndarray.Element
Methode, wie ina.item()
. Dies entspricht auch dernp.asscalar(a)
. Dies hat den Vorteil das arbeiten in Situationen mit Ansichten und überflüssig Achsen, während die oben genannten Lösungen wird derzeit Pause. Zum Beispiel,Dies hat auch den Vorteil, eine Ausnahme zu werfen, wenn das array nicht ein singleton, während die
a[0]
Ansatz wird stillschweigend gehen (die führen können, um Fehler schleichen unentdeckt durch).Verwenden numpy.asscalar konvertieren ein numpy-array /matrix einen Skalar-Wert:
Es hat eingebaute Fehler-überprüfung, ob es mehr als ein einzelnes element:
gibt:
Hinweis: das übergebene Objekt
asscalar
reagieren muss, umitem
, so übergeben Sie eine Liste oder Tupel wird nicht funktionieren.Ich würde einfach zu verwenden,
input
ist einndarray
von der rechten dtype, es gibt keinen overhead, danp.asarray
macht nichts in diesem Fall.input
ist einlist
,np.asarray
stellt sicher, dass die Ausgabe von der richtigen Art ist.