[英]Converting a list of strings in a numpy array in a faster way
br
是字符串列表的名称,如下所示:
['14 0.000000 -- (long term 0.000000)\n',
'19 0.000000 -- (long term 0.000000)\n',
'22 0.000000 -- (long term 0.000000)\n',
...
我对前两列感兴趣,我想将其转换为numpy数组。 到目前为止,我已经提出了以下解决方案:
x = N.array ([0., 0.])
for i in br:
x = N.vstack ( (x, N.array (map (float, i.split ()[:2]))) )
这导致具有2-D阵列:
array([[ 0., 0.],
[ 14., 0.],
[ 19., 0.],
[ 22., 0.],
...
但是,由于br
相当大(约10 ^ 5个条目),这个过程需要一些时间。 我想知道,有没有办法实现相同的结果,但在更短的时间内?
这对我来说要快得多:
import numpy as N
br = ['14 0.000000 -- (long term 0.000000)\n']*50000
aa = N.zeros((len(br), 2))
for i,line in enumerate(br):
al, strs = aa[i], line.split(None, 2)[:2]
al[0], al[1] = float(strs[0]), float(strs[1])
变化:
如果字符串列表来自文件,您可以尝试预处理(使用awk for exemple)字符串,并使用numpy.fromtxt。 如果你对这个列表的方式无能为力,你有几种可能:
编辑
也许这种方法稍快一点:
def conv(mysrt):
return map(float, mystr.split()[:2])
br_float = map(conv, br)
x = N.array(br_float)
更改
map (float, i.split()[:2])
至
map (float, i.split(' ',2)[:2])
可能会导致轻微的加速。 由于您只关心每行中前两个以空格分隔的项目,因此无需拆分整条线。 i.split(' ',2)
的2
i.split(' ',2)
告诉split
最多只能进行2次拆分。 例如,
In [11]: x='14 0.000000 -- (long term 0.000000)\n'
In [12]: x.split()
Out[12]: ['14', '0.000000', '--', '(long', 'term', '0.000000)']
In [13]: x.split(' ',2)
Out[13]: ['14', '0.000000', '-- (long term 0.000000)\n']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.