Wie konvertiere ich ein Array von Strings in ein Array von Floats in Numpy?

116

Wie konvertiere ich?

["1.1", "2.2", "3.2"]

zu

[1.1, 2.2, 3.2]

in NumPy?

Meh
quelle

Antworten:

178

Wenn Sie die Daten als Liste einlesen, tun Sie dies einfach np.array(map(float, list_of_strings))(oder verwenden Sie gleichwertig ein Listenverständnis). (In Python 3 müssen Sie listden mapRückgabewert aufrufen , wenn Sie ihn verwenden map, da mapjetzt ein Iterator zurückgegeben wird.)

Wenn es sich jedoch bereits um eine Reihe von Zeichenfolgen handelt, gibt es einen besseren Weg. Verwenden Sie astype().

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)
Joe Kington
quelle
und wenn Sie ein Array mit einer Zeichenfolge haben, die ich pflegen möchte? wie ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal
8
@ MrMartin - Dann benutze a list. Numpy Arrays werden bewusst homogen typisiert. Wenn Sie wirklich wollen, können Sie ein Objektarray verwenden (z np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object). B. ). Objektarrays haben jedoch keine wesentlichen Vorteile gegenüber der Verwendung einer Liste.
Joe Kington
4

Sie können dies auch verwenden

import numpy as np
x=np.array(['1.1', '2.2', '3.3'])
x=np.asfarray(x,float)
pradeep bisht
quelle
3

Eine andere Option könnte numpy.asarray sein :

import numpy as np
a = ["1.1", "2.2", "3.2"]
b = np.asarray(a, dtype=np.float64, order='C')

Für Python 2 *:

print a, type(a), type(a[0])
print b, type(b), type(b[0])

ergebend:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>
Herpes-freier Ingenieur
quelle
1
Ich habe alle Antworten hier in Python 2.7 verglichen. Angenommen, ich habe eine Liste mit 512 Zeichenfolgen, die Gleitkommazahlen darstellen, war dieser Ansatz der schnellste (etwas schneller als die Antwort von pradeep bisht, ungefähr 1,5-mal schneller als die Antwort von Thomio und mehr als doppelt so schnell wie die akzeptierte Antwort). Habe eine positive Bewertung!
Jodag
2

Wenn Sie eine einzelne Zeichenfolge haben (oder erstellen), können Sie np.fromstring verwenden :

import numpy as np
x = ["1.1", "2.2", "3.2"]
x = ','.join(x)
x = np.fromstring( x, dtype=np.float, sep=',' )

Beachten Sie, x = ','.join(x)dass das x-Array in einen String umgewandelt wird '1.1, 2.2, 3.2'. Wenn Sie eine Zeile aus einer txt-Datei lesen, ist jede Zeile bereits eine Zeichenfolge.

Thomio
quelle