我有一个字符串如下:
>>> 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 方式是什么?
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])
最简单的方法是根据空格拆分字符串,然后将字符串数据映射到浮点数。如果您不想创建丢弃的中间字符串,可以使用 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])
>>>
b = array([float(x) for x in a.split()])
b = map(lambda x: float(x), x.split())