java編程 Python語言其實很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?
Python語言其實很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?對于那些使用了多種開發(fā)語言(Java、C#、nodejs、Erlang)然后轉(zhuǎn)到Python進(jìn)行機(jī)器學(xué)習(xí)的人,我想談?wù)勎业目捶?。?/p>
Python語言其實很慢,為什么機(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ù)以億計的數(shù)據(jù),Python只會循環(huán)十幾次,剩下的就留給CPU和GPU了。所以兩個數(shù)量級無關(guān)緊要?一毫秒和100毫秒在整個系統(tǒng)中并不重要。
Python最大的優(yōu)點是它可以非常優(yōu)雅地將數(shù)據(jù)拋出到高效的C、CUDA中進(jìn)行計算。Numpy、panda、numba這些優(yōu)秀的開源庫可以非常方便高效地處理海量數(shù)據(jù),借助ZMQ、cell等還可以做分布式計算,gevent借助epoll系統(tǒng)IO優(yōu)化。因此,它不需要花費太多的精力就可以優(yōu)雅高效地完成海量數(shù)據(jù)處理和機(jī)器學(xué)習(xí)任務(wù)。這就是Python如此流行的原因。
好好想想。同樣的性能,代碼只有CPP或Java的三分之一或更少,不是很吸引人嗎?
java開發(fā),轉(zhuǎn)大數(shù)據(jù)好還是機(jī)器學(xué)習(xí)?
謝謝。我建議轉(zhuǎn)向大數(shù)據(jù)。
我也從事java開發(fā),我對這個主題的糾纏也有同樣的感受。畢竟,如果我精通Java,我已經(jīng)付出了大量的學(xué)習(xí)精力。如果我學(xué)習(xí)機(jī)器學(xué)習(xí),我基本上想告別Java,這無疑是一個非常不幸的選擇。
此外,轉(zhuǎn)向機(jī)器學(xué)習(xí)不僅需要深入了解python,還需要掌握數(shù)學(xué)算法,這是不可能一蹴而就的。因此,轉(zhuǎn)向人工智能的風(fēng)險相對較高,很容易打亂一個人的職業(yè)規(guī)劃。
目前,大數(shù)據(jù)方向仍是一個需求量大、前景好的工作方向。Java廣泛應(yīng)用于大數(shù)據(jù)領(lǐng)域。單憑Hadoop生態(tài)系統(tǒng)就足以完成大量的大數(shù)據(jù)工作,而Hadoop和Java是分不開的。
最重要的是大數(shù)據(jù)方向不會低于機(jī)器學(xué)習(xí)的工資,機(jī)器學(xué)習(xí)還處于初級階段。別擔(dān)心工資問題。
JAVA和PYTHON哪個更難?不是計算機(jī)專業(yè)的學(xué)生適合學(xué)哪個?
感謝您的邀請
!從編程語言本身的復(fù)雜性來看,Java比python更復(fù)雜,但python也可以編寫非常復(fù)雜的程序。
Java語言是一種純面向?qū)ο缶幊陶Z言,具有嚴(yán)格的語法要求。同時,Java是一種典型的靜態(tài)語言,也就是說,Java不允許未定義的賦值。因此,java代碼有更多的模式(儀式)內(nèi)容,包括一些復(fù)雜的定義過程。另外,Java對抽象有很高的要求。學(xué)習(xí)Java實際上就是學(xué)習(xí)Java如何完成抽象。
Python編程語言是腳本語言和面向?qū)ο笳Z言的結(jié)合。Python不僅具有腳本語言的簡單性,而且具有面向?qū)ο笳Z言的靈活性,因此受到了廣大程序員的歡迎。比如廣為流傳的“人生苦短,我用蟒蛇”就是一個比較生動的比喻。
對于非計算機(jī)專業(yè)的學(xué)生來說,由于Python語言易學(xué),而且Python開發(fā)環(huán)境相對容易搭建,所以學(xué)習(xí)Python是一個不錯的選擇。
Python有很多應(yīng)用領(lǐng)域,如web開發(fā)、大數(shù)據(jù)開發(fā)、大數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、自然語言處理等。不同的領(lǐng)域需要掌握不同的知識結(jié)構(gòu),所以在學(xué)習(xí)python之前最好先確定一個學(xué)習(xí)方向。
雖然不同方向的學(xué)習(xí)內(nèi)容不同,如Hadoop、spark等大數(shù)據(jù)開發(fā)學(xué)習(xí)內(nèi)容,numpy、SciPy、Matplotlib等機(jī)器學(xué)習(xí)掌握的內(nèi)容,但基本部分的內(nèi)容是統(tǒng)一的,如列表、元組、字符串、函數(shù)、OO編程等,異常處理、數(shù)據(jù)庫開發(fā)、網(wǎng)絡(luò)基礎(chǔ)開發(fā)等內(nèi)容(我在頭條)我寫了一系列關(guān)于學(xué)習(xí)python的文章,想學(xué)習(xí)的學(xué)生可以閱讀。
最后,學(xué)習(xí)Python需要大量的實驗。
剛上大一,報的計科,學(xué)了一年的c和JAVA,都說計算機(jī)和數(shù)學(xué)關(guān)系緊密,可為啥沒有感覺到?感到迷茫?
呵呵,你才剛一年級,剛剛學(xué)了一點語言。甚至不是初學(xué)者。關(guān)于計算機(jī),你學(xué)到的最后一件事就是毫不夸張地學(xué)習(xí)數(shù)學(xué)。光靠學(xué)幾門語言你什么都做不了。特別是在編程實現(xiàn)某些函數(shù)時,如果數(shù)學(xué)學(xué)得不好,就不能設(shè)計出合適的算法。數(shù)學(xué)建模非常重要。我勸你不要想當(dāng)然。讓我們來看看傅立葉變換,這是最常見的一個高數(shù)字。利用傅立葉變換設(shè)計低通濾波器是圖像處理中最常用的基本功能之一。
同樣,機(jī)器語言本身是一個二進(jìn)制矩陣。圖像的本質(zhì)也是由像素組成的矩陣。然后你就會知道線性代數(shù)的重要性。然后對各種圖像、信號進(jìn)行放大和縮小,需要用到各種插值,那么你會后悔離散數(shù)學(xué)沒學(xué)過。當(dāng)你學(xué)習(xí)信息論和通信原理時,你會后悔沒有理解復(fù)變函數(shù)和概率。。。。。
即使是大二專業(yè)基礎(chǔ)課使用的數(shù)據(jù)結(jié)構(gòu),堆棧、列、排序、二叉樹、哈希圖、遞歸等。。。。都是數(shù)學(xué)模型。。。
如果你真的想學(xué)好編程,你必須徹底地學(xué)習(xí)數(shù)學(xué)。至于編程語言,這完全是語法結(jié)構(gòu)的問題。是一樣的。編程側(cè)重于算法。至于用什么語言,是膚淺和膚淺的。就像寫一本書,一部經(jīng)典,把它翻譯成任何語言。如廁讀物,如果你用八種語言寫的話,也是如廁讀物。