python循環(huán)結(jié)構(gòu) Python語言其實(shí)很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?
Python語言其實(shí)很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?對于那些使用了多種開發(fā)語言(Java、C#、nodejs、Erlang)然后轉(zhuǎn)到Python進(jìn)行機(jī)器學(xué)習(xí)的人,我想談?wù)勎业目捶āJ?/p>
Python語言其實(shí)很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?
對于那些使用了多種開發(fā)語言(Java、C#、nodejs、Erlang)然后轉(zhuǎn)到Python進(jìn)行機(jī)器學(xué)習(xí)的人,我想談?wù)勎业目捶ā?/p>
首先,Python真的很慢嗎?我的回答是真的。非常慢。for循環(huán)比CPP慢兩個數(shù)量級。
那么為什么要使用Python呢?如果我們遍歷超過一億個數(shù)據(jù),兩個數(shù)量級的差異是不可接受的。但是,如果我們使用Python來執(zhí)行頂層邏輯并阻塞數(shù)以億計(jì)的數(shù)據(jù),Python只會循環(huán)十幾次,剩下的就留給CPU和GPU了。所以兩個數(shù)量級無關(guān)緊要?一毫秒和100毫秒在整個系統(tǒng)中并不重要。
Python最大的優(yōu)點(diǎn)是它可以非常優(yōu)雅地將數(shù)據(jù)拋出到高效的C、CUDA中進(jìn)行計(jì)算。Numpy、panda、numba這些優(yōu)秀的開源庫可以非常方便高效地處理海量數(shù)據(jù),借助ZMQ、cell等還可以做分布式計(jì)算,gevent借助epoll系統(tǒng)IO優(yōu)化。因此,它不需要花費(fèi)太多的精力就可以優(yōu)雅高效地完成海量數(shù)據(jù)處理和機(jī)器學(xué)習(xí)任務(wù)。這就是Python如此流行的原因。
好好想想。同樣的性能,代碼只有CPP或Java的三分之一或更少,不是很吸引人嗎?
操控excel,選擇Python還是vba?
對于大量數(shù)據(jù),建議使用Python。VBA通常將數(shù)據(jù)存儲在內(nèi)存中。當(dāng)數(shù)據(jù)沒有分割,計(jì)算機(jī)配置不高時,會出現(xiàn)更多的卡。經(jīng)過數(shù)據(jù)處理后,如果內(nèi)存沒有釋放,電腦也會多卡。VBA一般啟動兩個CPU核進(jìn)行數(shù)據(jù)計(jì)算,運(yùn)算效率較低?,F(xiàn)在微軟已經(jīng)停止更新VBA了,更建議大家學(xué)習(xí)python。如果只操作excel,兩種學(xué)習(xí)難度相差不大,但是Python的開發(fā)空間會更好
另一種更方便的方法是使用power Bi的三個組件進(jìn)行數(shù)據(jù)處理,power query進(jìn)行數(shù)據(jù)處理,PowerPivot進(jìn)行分析,power Bi進(jìn)行數(shù)據(jù)處理的優(yōu)點(diǎn)數(shù)據(jù)可視化的主要特點(diǎn)是學(xué)習(xí)周期短,數(shù)據(jù)可以自動刷新,啟動速度較快。使用這種方法,效率可能比excel快,但速度仍然不如python快。當(dāng)然,為了長期的可持續(xù)發(fā)展,還是比較推薦學(xué)習(xí)python的,但是起步周期會比較長
前10個坐標(biāo)點(diǎn)都是用來模擬城市的位置的,因?yàn)槠綍r用python容易一點(diǎn)比較熟悉,所以我選擇Python作為實(shí)現(xiàn)蟻群算法的編程語言,但是我第一次睡著了。猜猜看有多長時間,超過六分鐘,這是效率的可怕之處。你不能讓老師等6分鐘在最后的回答中選擇最佳路徑。恐怕要暫停了。用C語言對蟻群算法進(jìn)行了優(yōu)化,優(yōu)化結(jié)果不到1min。沒有比較就沒有壞處。在這之后,我深刻地認(rèn)識到Python執(zhí)行效率的可怕方面。
有些人可能想知道為什么C和Java比python更高效。事實(shí)上,它與語言的底層代碼有關(guān)。C語言是匯編語言的二次開發(fā),Java大多是C和C的二次開發(fā),但是我們的Python可以分為兩種情況,一種是Cpython,另一種是jpython,分別是C和Java的二次開發(fā),所以效率比這兩種語言要低。我看到消息說,為了解決python的效率問題,政府計(jì)劃重新開發(fā)底層python代碼。最近,我沒有看到任何相關(guān)的新聞。畢竟,這個工作量是非常巨大的。
Python到底有多慢?
在許多情況下,性能不是瓶頸。大約80%的應(yīng)用程序不需要高性能。
為什么Python效率這么低,還這么火?
這個答案適用于蟒蛇3。Xpython本身,這確實(shí)是相對緩慢的。但相對而言,python的編寫方式比directfor循環(huán)更快。例如,循環(huán)的標(biāo)準(zhǔn)編寫如下:對于范圍(10000)中的I:I**2,速度較慢,而標(biāo)準(zhǔn)編寫的嵌套循環(huán)速度較慢。它可以重寫為一個列表推理:[I**2 for I in range(10000)],這比direct for loop的標(biāo)準(zhǔn)編寫方法快得多。此外,它還可以使用Python的高級函數(shù)映射來執(zhí)行自動并行計(jì)算。它也可以寫成列表(map(lambda I:I**2,range(10000)))。map函數(shù)幾乎和list推理一樣快。
python如何提高for循環(huán)效率?
說實(shí)話,編程的入門門檻不高。如果你能寫一個If和else,你將幾乎處于入門級。問題是上限很高。如果你想通過編程找到一份工作,你不能只使用If和else,不是嗎?
迭代器、生成器、裝飾器等都需要掌握。其實(shí),這條路并不容易走。如果你想從一開始就掌握,那就需要半年的時間盡可能快,半年的時間盡可能慢。。。(這與你的認(rèn)真和才華有關(guān))
好吧,你又在網(wǎng)上做了一年外包項(xiàng)目,你已經(jīng)34歲了。
如果你成功地進(jìn)入了一家各方面薪水都不錯的互聯(lián)網(wǎng)公司,你能在這家公司工作多少年?眾所周知,互聯(lián)網(wǎng)公司正在迅速變化,許多公司在40歲時就被解雇了。
另外,在過去的三年里,你必須帶著你的孩子,陪著你的妻子,工作。壓力有多大