Bir dizi dizeyi numpy'de bir yüzer dizisine nasıl dönüştürebilirim?


117

Nasıl dönüştürülür

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

için

[1.1, 2.2, 3.2]

NumPy'de?

Yanıtlar:


179

Verileri bir liste halinde okuyorsanız, sadece yapın np.array(map(float, list_of_strings))(veya eşdeğer olarak, bir liste anlama kullanın). (Python 3, aramak gerekir listüzerinde mapkullanırsanız dönüş değeri mapberi, mapşimdi döner bir yineleyici.)

Ancak, zaten uyuşmuş bir dizi diziyse, daha iyi bir yol var. Kullanın astype().

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

ve korumak istediğim bir dizeye sahip bir diziniz varsa? ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3] gibi
ePascoal

8
@MrMartin - O zaman bir list. Numpy dizileri kasıtlı olarak homojen olarak yazılmıştır. Gerçekten istiyorsanız, bir nesne dizisi kullanabilirsiniz (örneğin np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). Bununla birlikte, nesne dizilerinin bir liste kullanmaya göre önemli bir avantajı yoktur.
Joe Kington

4

Bunu da kullanabilirsin

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

3

Başka bir seçenek de numpy.asarray olabilir :

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

Python 2 * için:

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

sonuçlanan:

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

1
Buradaki tüm cevapları python 2.7'de karşılaştırdım. Kayan noktalı sayıları temsil eden 512 diziden oluşan bir liste verildiğini varsayarsak, bu yaklaşım en hızlı olanıydı (pradeep bisht'in cevabından biraz daha hızlı, Thomio'nun cevabından yaklaşık 1.5 kat daha hızlı ve kabul edilen cevabın iki katından daha hızlı). Olumlu oy alın!
jodag

2

Tek bir dizeniz varsa (veya oluşturduysanız), np.fromstring'i kullanabilirsiniz :

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

Not, x = ','.join(x)x dizisini dizeye dönüştürür '1.1, 2.2, 3.2'. Bir txt dosyasından bir satır okursanız, her satır zaten bir dizge olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.