ループまわすのと内包表現と numpy.array

ちょっとしたテスト

import numpy
import time

def test0(n):
     """空"""
     t1=time.time()
     t2=time.time()
     print t2-t1

def test1(n):
     """内包表現"""
     t1=time.time()
     a=[ x for x in range(n) ]
     t2=time.time()
     print t2-t1

def test2(n):
     """append"""
     t1=time.time()
     a = []
     for x in range(n):
             a.append(x)
     t2=time.time()
     print t2-t1

def test3(n):
     """numpy.arange"""
     t1=time.time()
     a=numpy.arange(0,n,1)
     t2=time.time()
     print t2-t1

def do(n):
     """テストプログラム"""
     test0(n)
     test1(n)
     test2(n)
     test3(n)
     test0(n)
     test3(n)
     test2(n)
     test1(n)
     test0(n)

if __name__=="__main__":
     do(int(1e7))

もちろん numpy は速いけど,ループまわすより内包表現の方が早い.以下が出力結果.秒単位.python を書くときは出来るだけループを使わないで書かないと.

9.53674316406e-07 # 空
1.25220108032 # 内包表現
2.4286031723 # ループまわして append
0.0782718658447 # numpy.arange
1.90734863281e-06 空
0.0778160095215 # numpy.arange
2.43482279778 # ループまわして append
1.27957415581 # 内包表現
0.0 # 空