大きな array を初期化するのは何が速いか調べる修行
大きな array、たとえば 100 万個の要素の array を 0 で初期化したい。まずは、普通に 0 が 100 万個入ったリストを作ってしまって、それで初期化する方法 (list)。次に、0 を 100 万回生成するジェネレータで初期化する方法 (iter)。最後に 100 万回ループを回して append していく方法 (loop)。
# kissa.py import timeit init = """ import array num = 1000 * 1000 """ list =""" x = array.array('d', [0.0 for u in range(num)]) """ iter =""" x = array.array('d', (0.0 for u in range(num))) """ loop =""" x = array.array('d') for u in range(num): x.append(0.0) """ print ('list', timeit.Timer(list, init).timeit(100)) print ('iter', timeit.Timer(iter, init).timeit(100)) print ('loop', timeit.Timer(loop, init).timeit(100))
試してみた。
[takeyuki@sunya ~]$ python3 kissa.py list 12.7168409824 iter 23.1641027927 loop 25.9499599934
そうか。メモリはがっつり消費するけれど、list が速いんだな。当たり前と言えば当たり前か。初期化したい array が二つあるときも
a = [0.0 for u in range(num)] x = array.array('d', a) y = array.array('d', a)
で済むし。あ、del a しとかないといけないか。