Come convertire un array di stringhe in un array di float in numpy?


116

Come convertire

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

per

[1.1, 2.2, 3.2]

in NumPy?

Risposte:


179

Bene, se stai leggendo i dati come un elenco, fallo np.array(map(float, list_of_strings))(o, equivalentemente, usa una comprensione dell'elenco). (In Python 3, dovrai chiamare listil mapvalore di ritorno se lo usi map, poiché mapora restituisce un iteratore.)

Tuttavia, se è già un array numpy di stringhe, c'è un modo migliore. Usa astype().

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)

e se hai un array con una stringa che voglio mantenere? come ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin - Quindi usa un file list. Gli array Numpy sono tipizzati deliberatamente in modo omogeneo. Se vuoi davvero, puoi usare un array di oggetti (ad esempio np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). Tuttavia, gli array di oggetti non presentano vantaggi significativi rispetto all'utilizzo di un elenco.
Joe Kington

4

Puoi usare anche questo

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

3

Un'altra opzione potrebbe essere numpy.asarray :

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

Per Python 2 *:

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

con il risultato di:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>

1
Ho confrontato tutte le risposte qui in Python 2.7. Supponendo che mi venga fornito un elenco di 512 stringhe che rappresentano numeri in virgola mobile, questo approccio è stato il più veloce (leggermente più veloce della risposta di pradeep bisht, circa 1,5 volte più veloce della risposta di Thomio e più del doppio della risposta accettata). Avere un voto positivo!
jodag

2

Se hai (o crei) una singola stringa, puoi usare np.fromstring :

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

Nota, x = ','.join(x)trasforma l'array x in stringa '1.1, 2.2, 3.2'. Se leggi una riga da un file txt, ogni riga sarà già una stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.