将分隔符分隔的字符串转换为numpy数组的有效方法

时间:2012-03-22 03:11:00

标签: python numpy

我有一个字符串如下:

1|234|4456|789

我必须把它转换成numpy数组。我想知道最有效的方法。因为我将调用这个函数超过5000万次!

3 个答案:

答案 0 :(得分:15)

最快的方法是使用numpy.fromstring方法:

>>> import numpy
>>> data = "1|234|4456|789"
>>> numpy.fromstring(data, dtype=int, sep="|")
array([   1,  234, 4456,  789])

答案 1 :(得分:7)

@jterrace赢得一(1)个互联网。

在下面的测量中,示例代码已经缩短,以允许测试适合一行,而不会在可能的情况下滚动。

对于那些不熟悉timeit the -s flag allows you to specify a bit of code which will only be executed once的人。


最快且最不杂乱的方式是使用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

以下三个示例将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
{p> string.split通过generator-expression

投射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
带有类型为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

答案 2 :(得分:5)

试试这个:

import numpy as np
s = '1|234|4456|789'
array = np.array([int(x) for x in s.split('|')])

......假设这些数字都是整数。如果没有,请在上面的代码段中将int替换为float

编辑1:

或者,您可以执行此操作,它只会创建一个中间列表(由split()生成的列表):

array = np.array(s.split('|'), dtype=int)

编辑2:

另一种方式,可能更快(感谢所有评论,伙计们!):

array = np.fromiter(s.split("|"), dtype=int)