Python NumPy读/写文件性能(特别是ndarray.tofile)
我决定比较NumPy的Python NumPy读/写文件性能(特别是ndarray.tofile),python,python-3.x,performance,numpy,Python,Python 3.x,Performance,Numpy,我决定比较NumPy的ndarray.tofile与标准f.write的性能,结果让我感到惊讶。为什么tofile~30倍于正常的文件写入速度?在庞大的数据集上,tofile的性能是否优于f.write 写入: ndarray.tofile(文件):10.668秒 timeit.timeit("a.tofile(f)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)"
ndarray.tofile
与标准f.write
的性能,结果让我感到惊讶。为什么tofile
~30倍于正常的文件写入速度?在庞大的数据集上,tofile
的性能是否优于f.write
写入:
ndarray.tofile(文件):10.668秒
timeit.timeit("a.tofile(f)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("f.write(a.tobytes())", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("a=np.array(list(f.read()),dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
timeit.timeit("a=np.fromfile(f,dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
write | file.write(ndarray.tobytes()):0.316秒
timeit.timeit("a.tofile(f)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("f.write(a.tobytes())", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("a=np.array(list(f.read()),dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
timeit.timeit("a=np.fromfile(f,dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
阅读: np.array(list(f.read()),dt):11.544秒
timeit.timeit("a.tofile(f)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("f.write(a.tobytes())", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("a=np.array(list(f.read()),dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
timeit.timeit("a=np.fromfile(f,dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
np.fromfile(f,dt):11.544秒
timeit.timeit("a.tofile(f)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("f.write(a.tobytes())", "import numpy as np; dt=np.dtype('B'); f=open('test.x','wb'); a=np.array(range(100),dt)")
timeit.timeit("a=np.array(list(f.read()),dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
timeit.timeit("a=np.fromfile(f,dt)", "import numpy as np; dt=np.dtype('B'); f=open('test.x','rb');")
我有
0.225秒
和0.348秒
和0.348秒
和write
通过读取tofile()
的源代码,它复制文件句柄,调用flush()
将数据写入磁盘。但是f.write()
将在内存中缓存数据。@filippo您使用了相同的命令吗?我正在使用Anaconda/python3.6.4/Windows10@DarkMatterMatt我错过了3.x
标签。我可以在3.6.3
上复制与您类似的结果,而tofile
在2.7.14
上的速度稍快一些(相同的numpy版本,1.14.3
)