Python~高速リスト作成(内包表記、Numpy)~

リストの作成

Pythonでは標準で用意されているListの作り方として、for文を使ってappendで順番に増やしていくやり方と内包表記があります。また、Numpyを用いてarange関数で作成する方法もあります。それぞれの速さを計測してみましょう

リスト作成の速さ

それでは早速コードを見ていきましょう。
# Numpy
def genlist0(n,m):
    return np.arange(n,m)
%timeit genlist0(1,10**7)

# Python list
def genlist1(n,m):
    ans = []
    for i in range(n,m,1):
        ans.append(i)
    return ans

%timeit genlist1(1,10**7)

def genlist2(n,m):
    return [i for i in range(n,m,1)]

%timeit genlist2(1,10**7)

比較として、1-10000000までの1ずつ増える配列の生成にかかる時間を比較します。 NumpyでのArangeによる生成、リストでAppendして生成、リストの内包表記での生成です。 結果は以下の通りです。
100 loops, best of 5: 17.7 ms per loop
1 loop, best of 5: 1.14 s per loop
1 loop, best of 5: 714 ms per loop
なんということでしょう。 Numpyは17.7msecなのに対して、リストのfor文による生成は1.14sec、高速といわれる内包表記ですら714msecかかっております。 以下にNumpyが速いかがわかりますね。


コメント

このブログの人気の投稿

verilog~generate文とfor文による連続モジュールの生成

Quartus Primeの基本的な使い方(Verilogでの使い方)