Как преобразовать массив строк в массив чисел с плавающей запятой в numpy?

Ответы:

180

Что ж, если вы читаете данные в виде списка, просто сделайте это 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)
Джо Кингтон
источник
а если у вас есть массив со строкой, которую я хочу сохранить? например ['a', '1.1', '2.2', '3.3'] -> ['a', 1.1,2.2,3.3]
ePascoal
8
@MrMartin - Тогда используйте list. Массивы Numpy намеренно имеют однородную типизацию. Если вы действительно хотите, вы можете использовать массив объектов (например 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)
Pradeep Bisht
источник
4

Другой вариант - 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 строк, представляющих числа с плавающей запятой, этот подход был самым быстрым (немного быстрее, чем ответ pradeep bisht, примерно в 1,5 раза быстрее, чем ответ Thomio, и более чем в два раза быстрее, чем принятый ответ). Проголосуйте!
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 файла, каждая строка уже будет строкой.

Thomio
источник