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?

Meh
la source

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)
Joe Kington
la source
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)
pradeep bisht
la source
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'>
Ingénieur sans herpès
la source
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.

Thomio
la source