在战斗中提升自己——《海贼王》
最近在做筛选相似文本的工作,准备了3万个文本。一开始凭我的直觉应该不会有什么大的问题,毕竟这一块已经有很多人做过了。例如jieba、百度NLP等。然而当我以为就要完工时,问题还是来了。先看个计算公式30000^2/2/20/3600/24=260,30000个文本两两做对比结果需要260天才能完成,然后我就笑了,再然后就硬着头皮开始研究算法。在这个过程中就有了下面的问题:
问题:有一串str类型的数字,如何快速的转换成数组?
我这里给出了四种方法,并给出了简单的性能对比
方法一:
%%timeit
l = []for i in '123456789123456789123456789':
l.append(int(i))
np.array(l)
结果:11.2 µs ± 114 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
方法2:
%%timeit
np.array([i for i in '123456789123456789123456789'], dtype='int8')
结果:7.12 µs ± 50.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
方法3:
%%timeit
np.array(list('123456789123456789123456789'), dtype='int8')
结果:6.52 µs ± 52 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
方法四:
%%timeit
np.fromiter('123456789123456789123456789', 'int8')
结果:4.07 µs ± 33.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
从方法一到方法四性能都有提升,方法四比方法一的性能提升还是非常显著的。性能的一点点提升在大量计算面前表现出来的结果可能就是几分钟与几个小时甚至几天的差别了。
本文分享自微信公众号 - 飞桨PPDB(Tsing_Liu)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。