我会删除这个问题,因为事实证明这是我的错误。我遇到的瓶颈与网络延迟有关。
我有一个Python应用程序,它将一个包含4096个实数的文本文件作为输入。它看起来像这样:
0.3421,0.1215,..........,1.242
无论我尝试什么方法,都需要Python大约一秒钟才能将文本解析为实际的浮点数Python数组。
请注意,我使用的是Python 3.5
到目前为止,我试过了:
手动解析并使用列表推导创建列表:
arr = [float(val) for val in text.split(',')]
附加'['和']'换行标志并使用eval
功能
arr = eval('[' + text + ']')
附加'['和']'换行标志并使用json.loads
功能
import json
arr = json.loads('[' + text + ']')
创建Numpy字符串数组并将其数据类型转换为float:
import numpy as np
arr = np.array(text.split(',')).astype(np.float)
使用Numpy的fromstring
方法
import numpy as np
arr = np.fromstring(text, sep=',')
这些选项都没有比一秒钟更快。
如何让它更快地转换?
答案 0 :(得分:1)
我认为你以某种方式误认了。这是我的结果:
import timeit
timeit.timeit('eval(s)', number=1000,
setup="import random;"
" s = '[' + ','.join(str(random.random())"
" for _ in range(4096)) + ']'")
结果
4.92162881999684
这意味着使用字符串的简单eval
需要大约5毫秒。
使用JSON可以更快一点:
timeit.timeit('json.loads(s)', number=1000,
setup="import random, json;"
" s = '[' + ','.join(str(random.random())"
" for _ in range(4096)) + ']'")
结果
1.1105524039994634
我。即〜1.1ms
答案 1 :(得分:0)
Python具有与所有其他计算机应用程序一样的限制,如here所示。 1秒实际上是计算4096个数字数组的好时机,考虑到它每1/4096秒经过一个值。