- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-01-04T08:33:39+00:00","","")
* Pythonのチューニング [#f896a669]
#setlinebreak(on);
#TODO
#html(<div style="float:left;vertical-align:top;margin-right:100px;padding-top:10px;">)
#contents
-- 関連
--- [[Pythonのパフォーマンス確認]]
-- 参考
--- [[科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化>https://www.amazon.co.jp/gp/product/4774183881/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4774183881&linkCode=as2&tag=dmaga-22&linkId=ebb8a574fcdadc328b2b458cb94ce5f3]]
#html(</div>)
#html(<div style="float:left;vertical-align:top;">)
《参考書籍》
#html(<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=qf_sp_asin_til&t=dmaga-22&m=amazon&o=9&p=8&l=as1&IS2=1&detail=1&asins=4774183881&linkId=032d9b949cfe8995cf1841d01203c108&bc1=000000<1=_blank&fc1=333333&lc1=0066C0&bg1=FFFFFF&f=ifr"></iframe>);
#html(</div>)
#html(<div style="clear:both"></div>)
** 内包表記の使用 [#yd5c6460]
#html(<div style="padding-left:10px;">)
listb や dict の各要素に対して何らかの処理を行うような場合は、内包表記を使用した方が高速
確認用コード
#mycode2(){{
# coding: utf-8
"""内包表記の処理速度確認.
リストの各値に+Nする処理の速度をforループと内包表記で比較する。
"""
import time
def normal(list1, num):
stime = time.time()
result = []
for i in list1:
result.append(i + num)
print('forループ - {}'.format(time.time() - stime))
return result
def tuning(list1, num):
stime = time.time()
result = [i + num for i in list1]
print('内包表記 - {}'.format(time.time() - stime))
return result
if __name__ == '__main__':
# 確認用のリスト
list1 = range(10000)
# forループ
result1 = normal(list1, 2)
# 内包表記
result2 = tuning(list1, 2)
# 一応結果が同じか確認
print(result1 == result2)
}}
結果確認
#myterm2(){{
forループ - 0.001007080078125
内包表記 - 0.0006196498870849609
True
}}
#html(</div>)
** 高階関数の使用 [#f0761493]
#html(<div style="padding-left:10px;">)
#html(</div>)
** ユニバーサル関数の使用 [#f0761493]
#html(<div style="padding-left:10px;">)
#html(</div>)
** グローバル変数を使用しない [#s08ba26d]
#html(<div style="padding-left:10px;">)
#html(</div>)
** ループの中で自前の関数を呼ばない [#s08ba26d]
#html(<div style="padding-left:10px;">)
#html(</div>)
** 大きな変数は使用後にdelする [#s08ba26d]
#html(<div style="padding-left:10px;">)
#html(</div>)
** numba(jitコンパイラ) による高速化 [#i75595d8]
#html(<div style="padding-left:10px;">)
#html(</div>)
** その他 [#gc1329b8]
#html(<div style="padding-left:10px;">)
*** 同じ事を行う場合でも記述方法によってパフォーマンスは変わる [#f0761493]
#html(<div style="padding-left:10px;">)
#html(</div>)
*** list や dict の参照コストも考慮する [#x29b5ba5]
#html(<div style="padding-left:10px;">)
#html(</div>)
*** 可読性とはトレードオフな部分がある [#f94a0034]
#html(<div style="padding-left:10px;">)
#html(</div>)
#html(</div>)