Jak przekonwertować tablicę ciągów na tablicę wartości zmiennoprzecinkowych w numpy?


117

Jak konwertować

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

do

[1.1, 2.2, 3.2]

w NumPy?

Odpowiedzi:


179

Cóż, jeśli czytasz dane jako listę, po prostu zrób np.array(map(float, list_of_strings))(lub równoważnie, użyj rozumienia listy). (W Pythonie 3, trzeba zadzwonić listna mapwartości zwracanej, jeśli używasz map, ponieważ mapzwraca iterator teraz).

Jeśli jednak jest to już numeryczna tablica ciągów, jest lepszy sposób. Użyj astype().

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

a jeśli masz tablicę z ciągiem, którą chcę zachować? jak ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin - Następnie użyj pliku list. Numpy tablice są celowo jednorodnie wpisywane. Jeśli naprawdę chcesz, możesz użyć tablicy obiektów (np np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object).). Jednak tablice obiektów nie mają żadnych znaczących zalet w porównaniu z używaniem listy.
Joe Kington

4

Możesz również tego użyć

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

3

Inną opcją może być numpy.asarray :

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

W przypadku Pythona 2 *:

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

w wyniku:

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

1
Testowałem wszystkie odpowiedzi tutaj w Pythonie 2.7. Zakładając, że otrzymałem listę 512 ciągów, które reprezentują liczby zmiennoprzecinkowe, to podejście było najszybsze (nieco szybsze niż odpowiedź pradeepa bishta, około 1,5 razy szybsze niż odpowiedź Thomio i ponad dwukrotnie szybsze niż zaakceptowana odpowiedź). Głosuj za!
jodag

2

Jeśli masz (lub tworzysz) pojedynczy ciąg, możesz użyć np.fromstring :

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

Uwaga, x = ','.join(x)przekształca tablicę x na ciąg '1.1, 2.2, 3.2'. Jeśli czytasz wiersz z pliku txt, każda linia będzie już ciągiem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.