Numpyアクセラレータのキー--最適化方法の使用
1672 ワード
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 23 20:05:57 2016
@author: zang
"""
import timeit
normal_py_sec = timeit.timeit('sum(x*x for x in xrange(1000))', number=10000)
naive_np_sec = timeit.timeit('sum(na*na)', setup="import numpy as np;na=np.arange(1000)",number=10000)
good_np_sec = timeit.timeit('na.dot(na)', setup="import numpy as np;na=np.arange(1000)",number=10000)
print "Normal Python: %f sec" % normal_py_sec
print "Naive Numpy: %f sec" % naive_np_sec
print "Good Numpy: %f sec" % good_np_sec
実行結果:
Normal Python: 0.630046 sec
Naive Numpy: 0.949492 sec
Good Numpy: 0.012041 sec
Naive Numpyは配列をNumpyに格納するだけで、Python標準リストよりも時間がかかり、最も速いのはnp.dotメソッドを使用する場合なので、最適化の際、
配列要素のループ操作をPythonからいくつかの高度に最適化されたNumpyまたはScipy**拡張関数**に時間をかけて考慮します.