Як перетворити масив рядків у масив плавців у numpy?


116

Як конвертувати

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

до

[1.1, 2.2, 3.2]

в NumPy?

Відповіді:


179

Ну, якщо ви читаєте дані у списку, просто зробіть np.array(map(float, list_of_strings))(або, що рівнозначно, використовуйте розуміння списку). (У Python 3 вам потрібно буде зателефонувати listна mapповернене значення, якщо ви використовуєте map, оскільки він mapповертає ітератор зараз.)

Однак, якщо це вже нутризований масив рядків, є кращий спосіб. Використовуйте astype().

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

а якщо у вас є масив із рядком, який я хочу підтримувати? like ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal

8
@MrMartin - Потім скористайтеся a list. Масивні масиви свідомо гомогенно набираються. Якщо ви дійсно хочете, ви можете використовувати масив об’єктів (наприклад np.array(['apple', 1.2, 1, {'b'=None, 'c'=object()}], dtype=object)). Однак масиви об'єктів не мають суттєвих переваг перед використанням списку.
Джо Кінгтон

4

Ви також можете використовувати це

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

3

Інший варіант може бути numpy.asarray :

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

Для Python 2 *:

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

в результаті чого:

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

1
Я відповів на всі відповіді тут у python 2.7. Якщо припустити, що мені подано список із 512 рядків, які представляють числа з плаваючою комою, такий підхід виявився найшвидшим (трохи швидше, ніж відповідь убігаючого бішта, приблизно в 1,5 рази швидше відповіді Томіо і більш ніж удвічі швидший за прийняту відповідь). Майте нагороду!
jodag

2

Якщо у вас є (або створити) одну струну, ви можете використовувати np.fromstring :

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

Зауважте, x = ','.join(x)перетворює масив x у рядок '1.1, 2.2, 3.2'. Якщо ви читаєте рядок з файлу txt, кожен рядок буде вже рядком.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.