我需要从Python脚本中的文件(到Python列表)中加载(反序列化)预先计算的整数列表.列表很大(高达数百万项),只要加载速度最快,我就可以选择存储它的格式.
哪种方法最快,为什么?
import
在.py文件上使用,该文件仅包含分配给变量的列表
用cPickle
'sload
其他一些方法(也许numpy
?)
另外,如何可靠地对这些事情进行基准测试?
附录:可靠地测量这个是很困难的,因为import
它是缓存的,因此在测试中不能多次执行.第一次使用pickle加载也会因为操作系统的页面预先缓存而变得更快.加载100万个数字,cPickle
第一次运行需要1.1秒,后续执行脚本需要0.2秒.
直觉上我觉得cPickle
应该更快,但我会欣赏数字(我认为这是一个相当大的挑战).
是的,对我来说这很重要.
谢谢
我猜如果你真的需要列表中的东西,cPickle将是最快的.
如果你可以使用一个内置序列类型的数组,我会在四分之一秒内为100万个整数计时:
from array import array from datetime import datetime def WriteInts(theArray,filename): f = file(filename,"wb") theArray.tofile(f) f.close() def ReadInts(filename): d = datetime.utcnow() theArray = array('i') f = file(filename,"rb") try: theArray.fromfile(f,1000000000) except EOFError: pass print "Read %d ints in %s" % (len(theArray),datetime.utcnow() - d) return theArray if __name__ == "__main__": a = array('i') a.extend(range(0,1000000)) filename = "a_million_ints.dat" WriteInts(a,filename) r = ReadInts(filename) print "The 5th element is %d" % (r[4])