如何将字符串数组转换为numpy中的浮点数组?


116

如何转换

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

[1.1, 2.2, 3.2]

在NumPy中?

Answers:


179

好吧,如果您是以列表的形式读取数据,则可以这样做np.array(map(float, list_of_strings))(或等效地,使用列表理解)。(在Python 3,你需要调用listmap,如果你使用的返回值map,因为map现在返回一个迭代器)。

但是,如果已经是一串Numpy的字符串,则有更好的方法。使用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 2015年

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)

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个字符串列表,那么这种方法是最快的(比pradeep bisht的答案快一点,比Thomio的答案快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数组转换为string '1.1, 2.2, 3.2'。如果您从txt文件中读取一行,则每一行都已经是一个字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.