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?

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)

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)

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'>

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.