Bagaimana cara mengonversi array string menjadi array float di numpy?

116

Bagaimana cara mengonversi

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

untuk

[1.1, 2.2, 3.2]

di NumPy?

Meh
sumber

Jawaban:

179

Nah, jika Anda membaca data sebagai daftar, lakukan saja np.array(map(float, list_of_strings))(atau gunakan pemahaman daftar). (Dalam Python 3, Anda harus memanggil listnilai yang mapdikembalikan jika Anda menggunakan map, karena mapmengembalikan iterator sekarang.)

Namun, jika itu sudah berupa rangkaian string yang numpy, ada cara yang lebih baik. Gunakan astype().

import numpy as np
x = np.array(['1.1', '2.2', '3.3'])
y = x.astype(np.float)
Joe Kington
sumber
dan jika Anda memiliki array dengan string yang ingin saya pertahankan? seperti ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal
8
@MrMartin - Kemudian gunakan file list. Larik numpy sengaja diketik secara homogen. Jika Anda benar-benar ingin, Anda dapat menggunakan larik objek (misalnya np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). Namun, larik objek tidak memiliki keunggulan yang signifikan dibandingkan menggunakan daftar.
Joe Kington
4

Anda juga bisa menggunakan ini

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

Pilihan lain mungkin numpy.asarray :

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

Untuk Python 2 *:

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

yang menghasilkan:

['1.1', '2.2', '3.2'] <type 'list'> <type 'str'>
[1.1 2.2 3.2] <type 'numpy.ndarray'> <type 'numpy.float64'>
Insinyur Gratis Herpes
sumber
1
Saya membandingkan semua jawaban di sini dengan python 2.7. Dengan asumsi saya diberi daftar 512 string yang mewakili angka floating point, pendekatan ini adalah yang tercepat (sedikit lebih cepat dari jawaban bisht pradeep, sekitar 1,5 kali lebih cepat dari jawaban Thomio, dan lebih dari dua kali lebih cepat dari jawaban yang diterima). Dapatkan suara positif!
jodag
2

Jika Anda memiliki (atau membuat) satu string, Anda dapat menggunakan np.fromstring :

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

Catatan, x = ','.join(x)mengubah larik x menjadi string '1.1, 2.2, 3.2'. Jika Anda membaca satu baris dari file txt, setiap baris sudah menjadi string.

Thomio
sumber