6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonの配列アクセス速度比較

Last updated at Posted at 2018-07-12

#背景
配列の要素に先頭から最後まで順番にアクセスしていく処理が必要になったが、配列が大きくなると、結構重い処理になる。少しでもアクセス速度を上げたい。
この記事の改良版→https://qiita.com/pegasusBS15/items/620985fdc21c75ad8026
#環境

  • macOS High Sierra10.13.5
  • Python3.6.4
  • Jupyter notebook5.5.0

#方法
比較する配列の型は4種類

  1. リスト
  2. 辞書
  3. タプル
  4. Numpyのarray
    各配列は一次元で0から999の数字を格納。
    処理時間の計測はJupyter notebook上でマジックコマンド%%timeitを使用
    複数回実行して、処理時間の平均・標準偏差を出してくれるので、処理時間にばらつきのあるプログラムの時に便利。

#コードと結果
###リスト型

%%timeit
a=[i for i in range(10**3)]
b=0
for w in a:
    b+=w

81.3 µs ± 1.68 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

###辞書型

%%timeit
a=dict(zip([i for i in range(10**3)],[i for i in range(10**3)]))
b=0
for w in a:
    b+=w

164 µs ± 4.94 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

###タプル型

%%timeit
a=(i for i in range(10**3))
b=0
for w in a:
    b+=w

110 µs ± 5.48 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

###Numpyのarray型

%%timeit
import numpy as np
a=np.array([i for i in range(10**3)])
b=0
for w in a:
    b+=w

194 µs ± 587 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)

#結論
要素のアクセスに関してはリスト型が一番速い。漠然とNumpyが速いイメージだったので驚き。
※今回の例のような、要素の総和を求めるプログラムなら、本来はnumpy.sumで計算したほうが速い。
※そもそもリストの要素に何度もアクセスするようなコードを書かないほうが良い。

6
6
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?