一個函數有兩個輸入量,一個算術複雜度高,一個算術複雜度低,你會把哪個放到外循環,哪個放到內循環?
想想也知道應該把算術複雜度低的放到內循環,因爲每次外循環迭代,內循環就要計算一次。
如果是用array類型,那麼內循環就省了(可以直接計算數值),那麼應該迭代複雜度高的量,還是複雜度低的量?
在寫上一篇《用python繪出莫比烏斯環》的文章中(現在已經更改),我認爲應該迭代複雜度低的量,這樣可以發揮出numpy中批量計算的優勢。
但是剛剛睡午覺的時候,我怎麼想怎麼不對,即使是array類型,也應該與兩層迭代的原理相同,於是寫了個腳本測試了一下。
brucesair:py-develop bruce$ python test.py
func_x win:20
func_y win:80
brucesair:py-develop bruce$ python test.py
func_x win:38
func_y win:62
brucesair:py-develop bruce$ python test.py
func_x win:31
func_y win:69
brucesair:py-develop bruce$ python test.py
func_x win:33
func_y win:67
brucesair:py-develop bruce$ python test.py
func_x win:37
func_y win:63
brucesair:py-develop bruce$ python test.py
func_x win:31
func_y win:69
func_x是迭代複雜度低的量,也就是每次迭代都計算複雜度高的量func_y是迭代複雜度高的量,也就是每次都計算複雜度低的量。
發現優勢並不明顯。但是結論依然是:儘量把計算複雜度低的量放到內循環(或者用array直接計算出值)。
源代碼:
https://github.com/gt11799/array_iteration_test
————————————
github主頁:https://github.com/gt11799
E-mail:[email protected]