python編程 python如何提高for循環(huán)效率?
python如何提高for循環(huán)效率?本回答適用于python3.xpython本身速度確實(shí)相對比較慢。 但是相對來說,python有比直接的for循環(huán)快速的寫法。比如標(biāo)準(zhǔn)for循環(huán)寫法如下for i
python如何提高for循環(huán)效率?
本回答適用于python3.xpython本身速度確實(shí)相對比較慢。 但是相對來說,python有比直接的for循環(huán)快速的寫法。比如標(biāo)準(zhǔn)for循環(huán)寫法如下for i in range(10000): i**2這樣就比較慢,標(biāo)準(zhǔn)寫法的嵌套循環(huán)更慢??筛膶憺榱斜硗茢嗍?: [ i**2 for i in range(10000)], 這樣就比直接for循環(huán)標(biāo)準(zhǔn)寫法要快不少; 此外, 還可以用python自帶的高級函數(shù) map,自動并行計(jì)算。寫為 list(map(lambda i: i**2, range(10000))) 也很快。 map函數(shù)和列表推斷式速度差不多。
Python語言其實(shí)很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?
對于用過幾種開發(fā)語言(java,c#,nodejs,erlang),而后轉(zhuǎn)Python做機(jī)器學(xué)習(xí)的人,我說說我的看法。
首先,大家說python慢是真的嗎?我的回答是真的。非常慢,for循環(huán)比cpp慢兩個(gè)數(shù)量級。
那為什么還用Python?假如我們遍歷過億的數(shù)據(jù),兩個(gè)數(shù)量級的差異是無法接受的。但如果我們用python做最上層的邏輯,把上億數(shù)據(jù)進(jìn)行分塊,python只循環(huán)十幾次,剩下扔給cpu和gpu。那么兩個(gè)數(shù)量級是否就無所謂了呢?1毫秒和100毫秒在整個(gè)系統(tǒng)中真的無所謂了。
python最大的優(yōu)勢在于,可以非常非常優(yōu)雅的把數(shù)據(jù)扔給高效的c,cuda去做計(jì)算。numpy,pandas,numba這些優(yōu)秀的開源庫可以非常方便的高效的處理海量的數(shù)據(jù),借助zmq,celery等還可以做分布式計(jì)算,gevent借助系統(tǒng)的epoll進(jìn)行io優(yōu)化。所以,不需要花太多精力,就可以優(yōu)雅,高效的實(shí)現(xiàn)海量的數(shù)據(jù)處理,機(jī)器學(xué)習(xí)的任務(wù)。這是python火爆的原因。
想想,同樣的性能,代碼只有cpp或java的三分之一甚至更少,是不是很有誘惑力?