Como converter um array de strings em um array de floats em numpy?

117

Como converter

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

para

[1.1, 2.2, 3.2]

em NumPy?

Meh
fonte

Respostas:

179

Bem, se você está lendo os dados como uma lista, apenas faça np.array(map(float, list_of_strings))(ou, de forma equivalente, use uma compreensão de lista). (No Python 3, você precisará chamar listo mapvalor de retorno se usar map, já que mapretorna um iterador agora.)

No entanto, se já for uma série de strings, existe uma maneira melhor. Use astype().

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)
Joe Kington
fonte
e se você tem um array com uma string que eu quero manter? como ['a', '1.1', '2.2', '3,3'] -> ['a', 1.1,2.2,3.3]
ePascoal
8
@MrMartin - Então use a list. Matrizes Numpy são deliberadamente digitadas de forma homogênea. Se você realmente quiser, pode usar um array de objetos (por exemplo np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). No entanto, as matrizes de objetos não têm nenhuma vantagem significativa sobre o uso de uma lista.
Joe Kington
4

Você pode usar isso também

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

Outra opção pode ser numpy.asarray :

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

Para Python 2 *:

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

resultando em:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>
Herpes Free Engineer
fonte
1
Eu comparei todas as respostas aqui no python 2.7. Supondo que receba uma lista de 512 strings que representam números de ponto flutuante, essa abordagem foi a mais rápida (um pouco mais rápida do que a resposta de pradeep bisht, cerca de 1,5 vezes mais rápida do que a resposta de Thomio e mais de duas vezes mais rápida que a resposta aceita). Tenha um voto positivo!
Jodag
2

Se você tiver (ou criar) uma única string, poderá usar np.fromstring :

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

Observe, x = ','.join(x)transforma o array x em string '1.1, 2.2, 3.2'. Se você ler uma linha de um arquivo txt, cada linha já será uma string.

Thomio
fonte