字符串轉數組性能簡單對比——實戰場景

在戰鬥中提升自己——《海賊王》

最近在做篩選相似文本的工作,準備了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源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章