我有一个字符串如下:
1|234|4456|789
Run Code Online (Sandbox Code Playgroud)
我必须把它转换成numpy数组.我想知道最有效的方法.因为我将调用这个函数超过5000万次!
jte*_*ace 19
最快的方法是使用numpy.fromstring方法:
>>> import numpy
>>> data = "1|234|4456|789"
>>> numpy.fromstring(data, dtype=int, sep="|")
array([ 1, 234, 4456, 789])
Run Code Online (Sandbox Code Playgroud)
@jterrace赢得一(1)个互联网.
在下面的测量中,示例代码已经缩短,以允许测试适合在一条线上,而不会在可能的情况下滚动.
对于那些不熟悉timeit
的-s
标志允许你指定位的代码将只执行一次.
最快和最杂乱的方式是使用numpy.fromstring
jterrace建议:
python -mtimeit -s"import numpy;s='1|2'" "numpy.fromstring(s,dtype=int,sep='|')"
100000 loops, best of 3: 1.85 usec per loop
Run Code Online (Sandbox Code Playgroud)
以下三个示例string.split
与另一个工具结合使用.
string.split
同 numpy.fromiter
python -mtimeit -s"import numpy;s='1|2'" "numpy.fromiter(s.split('|'),dtype=int)"
100000 loops, best of 3: 2.24 usec per loop
Run Code Online (Sandbox Code Playgroud)
string.split
与int()
通过发电机表达铸
python -mtimeit -s"import numpy;s='1|2'" "numpy.array(int(x) for x in s.split('|'))"
100000 loops, best of 3: 3.12 usec per loop
Run Code Online (Sandbox Code Playgroud)
string.split
使用NumPy类型的数组 int
python -mtimeit -s"import numpy;s='1|2'" "numpy.array(s.split('|'),dtype=int)"
100000 loops, best of 3: 9.22 usec per loop
Run Code Online (Sandbox Code Playgroud)
试试这个:
import numpy as np
s = '1|234|4456|789'
array = np.array([int(x) for x in s.split('|')])
Run Code Online (Sandbox Code Playgroud)
...假设这些数字都是整数.如果不是,则更换int
与float
在上面的代码段中.
编辑1:
或者,您可以这样做,它只会创建一个中间列表(生成者split()
):
array = np.array(s.split('|'), dtype=int)
Run Code Online (Sandbox Code Playgroud)
编辑2:
而另一种方式,可能更快(感谢所有评论,伙计们!):
array = np.fromiter(s.split("|"), dtype=int)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13738 次 |
最近记录: |