Comment convertir un tableau de chaînes en un tableau de flottants dans numpy?


116

Comment convertir

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

à

[1.1, 2.2, 3.2]

dans NumPy?

Réponses:


179

Eh bien, si vous lisez les données sous forme de liste, faites simplement np.array(map(float, list_of_strings))(ou de manière équivalente, utilisez une compréhension de liste). (Dans Python 3, vous devrez appeler listla mapvaleur de retour si vous utilisez map, car maprenvoie un itérateur maintenant.)

Cependant, s'il s'agit déjà d'un tableau numpy de chaînes, il existe un meilleur moyen. Utilisez astype().

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

et si vous avez un tableau avec une chaîne que je veux maintenir? comme ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin - Utilisez ensuite un fichier list. Les tableaux Numpy sont délibérément typés de manière homogène. Si vous voulez vraiment, vous pouvez utiliser un tableau d'objets (par exemple np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). Cependant, les tableaux d'objets n'ont pas d'avantages significatifs par rapport à l'utilisation d'une liste.
Joe Kington

4

Vous pouvez également l'utiliser

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

3

Une autre option pourrait être numpy.asarray :

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

Pour Python 2 *:

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

résultant en:

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

1
J'ai comparé toutes les réponses ici en python 2.7. En supposant qu'on me donne une liste de 512 chaînes qui représentent des nombres à virgule flottante, cette approche était la plus rapide (légèrement plus rapide que la réponse de pradeep bisht, environ 1,5 fois plus rapide que la réponse de Thomio, et plus de deux fois plus rapide que la réponse acceptée). Ayez un vote positif!
jodag

2

Si vous avez (ou créez) une seule chaîne, vous pouvez utiliser np.fromstring :

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

Remarque, x = ','.join(x)transforme le tableau x en chaîne '1.1, 2.2, 3.2'. Si vous lisez une ligne d'un fichier txt, chaque ligne sera déjà une chaîne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.