python基礎(chǔ)教程廖雪 學(xué)Python一定要會(huì)算法嗎?
學(xué)Python一定要會(huì)算法嗎?剛開始入門時(shí),不是必須學(xué)好算法的。但是隨著技術(shù)的深入,算法還是需要的,不然只能干點(diǎn)"搬磚"的活兒。1、學(xué)好軟件開發(fā)離不開計(jì)算機(jī)理論基礎(chǔ),如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、網(wǎng)絡(luò)技術(shù)、算
學(xué)Python一定要會(huì)算法嗎?
剛開始入門時(shí),不是必須學(xué)好算法的。但是隨著技術(shù)的深入,算法還是需要的,不然只能干點(diǎn)"搬磚"的活兒。
1、學(xué)好軟件開發(fā)離不開計(jì)算機(jī)理論基礎(chǔ),如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、網(wǎng)絡(luò)技術(shù)、算法研究等。如果熱愛這門技術(shù),這些都是不問題,先入門,這些慢慢的都可以補(bǔ)上。
2、關(guān)于算法,它是軟件開發(fā)的靈魂,沒有好的算法寫不出優(yōu)秀的程序。
3、如何學(xué)習(xí)算法,首先選取經(jīng)典算法教材?;A(chǔ)的可以先從《數(shù)據(jù)結(jié)構(gòu)》學(xué)起,里面有些基礎(chǔ)算法,然后再去學(xué)專門的算法(其實(shí)把數(shù)據(jù)結(jié)構(gòu)范疇的算法學(xué)好,一般就夠用了)。還有網(wǎng)上有很多論壇,算法網(wǎng)站,為了吸引眼球 一般都做的淺顯易懂。還有大部分算法為c語言,但語言在算法層面都相通的,明白算法模型才是最重要的。
4、萬事開頭難,只要入門,剩下的就是慢慢經(jīng)營這門技術(shù)就行了。算法在實(shí)踐中學(xué)的最快也最牢固。
希望能幫到你
Python語言其實(shí)很慢,為什么機(jī)器學(xué)習(xí)這種快速算法步驟通常還是用呢?
對于用過幾種開發(fā)語言(java,c#,nodejs,erlang),而后轉(zhuǎn)Python做機(jī)器學(xué)習(xí)的人,我說說我的看法。
首先,大家說python慢是真的嗎?我的回答是真的。非常慢,for循環(huán)比cpp慢兩個(gè)數(shù)量級(jí)。
那為什么還用Python?假如我們遍歷過億的數(shù)據(jù),兩個(gè)數(shù)量級(jí)的差異是無法接受的。但如果我們用python做最上層的邏輯,把上億數(shù)據(jù)進(jìn)行分塊,python只循環(huán)十幾次,剩下扔給cpu和gpu。那么兩個(gè)數(shù)量級(jí)是否就無所謂了呢?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的三分之一甚至更少,是不是很有誘惑力?
python是怎樣的編程語言?
python非常容易上手,而且能干很多事情,WEB開發(fā),機(jī)器學(xué)習(xí)人工智能,數(shù)據(jù)分析,量化投資,爬蟲等,基本可以應(yīng)用到各行各業(yè),而且大家都在做基于PYTHON的庫,使得PYTHON語言變成一門直接拿來就能用的語言,更像一種工具了,比如機(jī)器學(xué)習(xí),可能理論很復(fù)雜,但是實(shí)際在PYTHON中僅僅幾行代碼就能實(shí)現(xiàn),不用花太多時(shí)間用在碼代碼上面, 學(xué)過python之后就再也不想寫其他語言了,python 現(xiàn)在是越來越火。
為什么有些算法崗位,需要用C 而不是python?
C/C 是比較底層的語言,可以對CPU/內(nèi)存等計(jì)算機(jī)資源特別是硬件進(jìn)行非常精細(xì)的控制,算法運(yùn)算做到最精細(xì)自然要使用它們。
但是它們的優(yōu)點(diǎn)自然也是他們的缺點(diǎn),精細(xì)的操作自然需要精細(xì)的編程,精細(xì)的編程自然需要繁復(fù)的語言設(shè)定,比如什么是指針什么是指針函數(shù)什么是函數(shù)指針……等你搞清這些佶屈聱牙的概念,你大概也沒有寫代碼的沖動(dòng)了。更何況,你想寫出高性能的代碼,這些概念是必須精通的
python有一個(gè)很重要的特性,就是所謂的“膠水語言”,“膠水”的意思就是,它可以把不同語言編寫的代碼模塊組合在一起,然后統(tǒng)一通過python去調(diào)用。其實(shí)絕大多數(shù)算法庫都是使用C/C 編寫,然后提供python的接口供用戶使用,畢竟大部分人只需要知道怎么調(diào)用封裝好的算法就好。但你要想實(shí)現(xiàn)自己的算法就必須會(huì)C/C
打個(gè)不是很恰當(dāng)?shù)谋确?,python就像電視遙控器,C/C 就像遙控器里的電板,平時(shí)你想換換臺(tái),你只要按按鈕就好。但是有一天你就是要個(gè)把畫面旋轉(zhuǎn)九十度的功能,而遙控器上沒有這個(gè)功能,但是拆了遙控器電板插幾個(gè)元件就能實(shí)現(xiàn),你咋辦?
作為一名研究生,除了可以用python寫各種算法之外,還應(yīng)該如何提高自己的python水平?
如題,作為一個(gè)研究生,你用Python寫算法,我覺得你應(yīng)該是想往大數(shù)據(jù),人工智能方面發(fā)展。
Python這些年隨著大數(shù)據(jù)人工智能的大爆發(fā)也變得流行起來,你想再提升自己Python的水平,我覺得你可以從以下著手!
分布式計(jì)算框架spark
Apache Spark是一個(gè)計(jì)算速度快,易用,支持復(fù)雜分析的大數(shù)據(jù)處理框架,大有取代mapreduce之勢。
Python雖說在機(jī)器學(xué)習(xí)和人工智能方面有極好的應(yīng)用,但是Python有一個(gè)大缺陷,不支持分布式計(jì)算,但是不要緊,spark提供了極好的Python接口Pyspark,借助他,Python在分布式計(jì)算、流計(jì)算方面有了極大提高。
另外,spark的核心RDD彈性分布式數(shù)據(jù)集和Python中pandas中的DataFrame十分相似,可以十分方便的相互轉(zhuǎn)化。所以說spark讓Python有了分布式處理大數(shù)據(jù)集的能力。
web后端
Python有十分多的強(qiáng)大的web后端框架,如Django,flask等,學(xué)習(xí)這這可以鞏固Python的基礎(chǔ),又會(huì)使用到Python的高級(jí)用法,如裝飾器,類及魔法方法,數(shù)據(jù)庫等。
學(xué)習(xí)spark和web后端的優(yōu)勢
你不可能一直在單機(jī)上使用模型,你可能會(huì)在大數(shù)據(jù)框架和網(wǎng)站來部署模型,這需要你了解后端和分布式計(jì)算,學(xué)習(xí)這兩方面,既能提升Python水平,也能讓你在日后的大數(shù)據(jù)和人工智能領(lǐng)域如虎添翼。