3

我有一个字符串如下:

>>> a
'0 911 872.9 354.9 901.9 395.0 904.6 414.0 903.8 400.5'

现在我想把它转换成一个数组:

>>> b
array([   0. ,  911. ,  872.9,  354.9,  901.9,  395. ,  904.6,  414. ,
        903.8,  400.5])

这样做的最 Pythonic 方式是什么?

4

4 回答 4

10

使用numpy.fromstring

import numpy as np
np.fromstring(a, dtype=float, sep=' ')

演示:

>>> np.fromstring('0 911 872.9 354.9 901.9 395.0 904.6 414.0 903.8 400.5', dtype=float, sep=' ')
array([   0. ,  911. ,  872.9,  354.9,  901.9,  395. ,  904.6,  414. ,  903.8,  400.5])  
于 2013-10-03T07:30:58.253 回答
3

最简单的方法是根据空格拆分字符串,然后将字符串数据映射到浮点数。如果您不想创建丢弃的中间字符串,可以使用 imap。另外我建议创建双精度数组以减少精度错误。

演示

>>> from array import array
>>> from itertools import imap
>>> array('d', imap(float, a.split()))
array('d', [0.0, 911.0, 872.9, 354.9, 901.9, 395.0, 904.6, 414.0, 903.8, 400.5])
>>> 
于 2013-10-03T07:24:32.267 回答
3

b = array([float(x) for x in a.split()])

于 2013-10-03T07:24:40.467 回答
0
b = map(lambda x: float(x), x.split())
于 2013-10-03T12:08:47.693 回答