一个函数有两个输入量,一个算术复杂度高,一个算术复杂度低,你会把哪个放到外循环,哪个放到内循环?
想想也知道应该把算术复杂度低的放到内循环,因为每次外循环迭代,内循环就要计算一次。
如果是用array类型,那么内循环就省了(可以直接计算数值),那么应该迭代复杂度高的量,还是复杂度低的量?
在写上一篇《用python绘出莫比乌斯环》的文章中(现在已经更改),我认为应该迭代复杂度低的量,这样可以发挥出numpy中批量计算的优势。
但是刚刚睡午觉的时候,我怎么想怎么不对,即使是array类型,也应该与两层迭代的原理相同,于是写了个脚本测试了一下。
func_x是迭代复杂度低的量,也就是每次迭代都计算复杂度高的量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_y是迭代复杂度高的量,也就是每次都计算复杂度低的量。
发现优势并不明显。但是结论依然是:尽量把计算复杂度低的量放到内循环(或者用array直接计算出值)。
源代码:
https://github.com/gt11799/array_iteration_test
————————————
github主页:https://github.com/gt11799
E-mail:gting405@163.com