隨著人工智能的熱度越來越高,,Python這個詞我們聽到的越來越多,,伴隨著Python這個單詞一起涌入我們視線的還有很多句子:人生苦短,我用Python;Python-人工智能第一語言等等這樣的句子。Python真的如大家說的那樣,。這么厲害么?編程語言那么多,,常用的也有10多種,,Python憑什么能夠登上人工智能第一語言的寶座? 在所有編程語言里,,Python并不算年輕,從1991年發(fā)布第一個版本,,至今已經(jīng)快30年了,。最近幾年,隨著人工智能概念的火爆,,Python迅速升溫,,成為眾多AI從業(yè)者的首選語言。那么Python到底有什么魔力呢?我們從四個要點看看為什么Python能夠成為人工智能的第一語言,。 01,、簡便,直觀且通俗易懂,,新手福音 跟其他語言比較,,Python有著簡便、直觀且通俗易懂的優(yōu)勢,。我們請出了以效率著稱的C語言,,和在業(yè)務(wù)層面有著優(yōu)秀戰(zhàn)績的Java語言,讓他們和Python做對比,。我們分別使用3種語言寫一個HelloWorld,,看誰對新手更友好。 首先是C語言: 嗯,代碼量還行,,不算{}一共有三行代碼,。但是,int,main,return這都是什么跟什么,?對于新手來說,,一開始只能強行記憶了,沒有任何理解的成分,,我們只需要明白printf()使用來輸出的,,其他的即使解釋了,也跟天書沒什么區(qū)別,。 接下來該Java語言上場了,,同樣還是輸出HelloWorld的例子: 貌似比C語言的更復(fù)雜了。由于Java語言面向?qū)ο蟮奶匦?,所以任何代碼都必須要放在class里面,,所以Java的固定代碼比較多。同樣對于新手來說,,Java語言也是從記憶到理解的過程,,也只能強行記憶。 C和Java語言看上去對新手不太友好,,那么Python語言會有什么表現(xiàn)呢,?相同的例子,會不會有不一樣的結(jié)果呢,? 就一句話,想輸出helloworld,一行print語句就夠了,。沒有C和Java那么多格式和需要額外記憶的東西,。所以誰是新手福利,誰是菜鳥殺手呢,? 02,、編譯 VS 解釋 當(dāng)然,僅僅是一個Hello World的話,,C和Java的代碼也多不了幾行,。可是不要忘了,,C和Java都是編譯型語言,,代碼運行前都必須先經(jīng)過編譯的環(huán)節(jié)。 什么是編譯呢,?原來,,除了艱深難懂的機器語言,我們寫下的程序計算機是無法直接讀取的,。而是要經(jīng)過“翻譯”的過程,,計算機才能“理解”要執(zhí)行的指令。充當(dāng)“翻譯官”的是編譯器的程序,。當(dāng)高級語言源程序進(jìn)入計算機,,被編譯器翻譯成目標(biāo)程序,以完成源碼要處理的運算并取得結(jié)果,。 對于C語言來說,,在不同的操作系統(tǒng)上使用什么樣的編譯器,也是一個需要斟酌的問題。一旦代碼被帶到新的機器,,運行環(huán)境和之前不同,,還需要重新編譯。有時候不同的計算機的編譯環(huán)境有所區(qū)別,,我們還得寫文件修改源代碼來滿足編譯環(huán)境的需求,。 而Python是一門解釋型語言。充當(dāng)編程語言與機器語言的翻譯官是解釋器,,解釋器不會一次把整個程序翻譯出來,,而是每翻譯一行程序敘述就立刻運行,,然后再翻譯下一行再運行,,不產(chǎn)生目標(biāo)程序。解釋器就像是同聲口譯,,編程語言每說完一句話,,解釋器立即翻譯給計算機,計算機立即執(zhí)行程序,。 我們可以這么理解,Python語言寫的程序是不需要裝編譯器來編譯程序的,,就可以直接運行,。而C和Java則需要安裝編譯器,而且如果版本和環(huán)境有偏差的話,,可能還需要修改源文件,。所以對于新手來講,使用Python這樣的解釋性語言更直觀方便,,而且也更省事,。 03、強大的AI支持庫 Python的另一個優(yōu)勢在于它具備了強大的AI支持庫,,有了支持庫,,Python就像瑞士軍刀一樣,在各種各樣的場合都可以用到,。我們舉幾個例子,,看看Python的支持庫有多強大吧。 數(shù)據(jù)神器NumPy 我們知道,,不管是機器學(xué)習(xí)(Machine Learning, ML),還是深度學(xué)習(xí)(Deep Learning,DL),,模型(Model),、算法(algorithm)、網(wǎng)絡(luò)結(jié)構(gòu)(structure)都可以用現(xiàn)成的,但數(shù)據(jù)是要自己負(fù)責(zé)I/O并傳遞給算法的,。而各種算法,,實際上處理的都是矩陣和向量。 NumPy由數(shù)據(jù)科學(xué)家Travis Oliphant創(chuàng)作,,支持維度數(shù)組與矩陣運算,。結(jié)合Python內(nèi)置的math和random庫,堪稱AI數(shù)據(jù)神器,!有了它們,,就可以放心大膽玩矩陣了! 使用NumPy,,矩陣的轉(zhuǎn)置、求逆,、求和,、叉乘、點乘……都可以輕松地用一行代碼搞定,,行,、列可以輕易抽取,矩陣分解也不過是幾行代碼的問題,。而且,,NumPy在實現(xiàn)層對矩陣運算做了大量的并行化處理,通過數(shù)學(xué)運算的精巧,,而不是讓用戶自己寫多線程程序,,來提升程序效率。 有了Python這種語法簡潔明了,、風(fēng)格統(tǒng)一,;連矩陣元素都可以像在紙上寫公式一樣;寫完公式還能自動計算出結(jié)果的編程語言,,開發(fā)者就可以把工作重心放在模型和算法上,,不用操心運行的問題了。 可視化庫Matplotlib Matplotlib 是 Python 的繪圖庫,。它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案,。它也可以和圖形工具包一起使用,,如 PyQt 和 wxPython。Matplotlib主要的作用就是強大的數(shù)據(jù)可視化~在做數(shù)據(jù)分析的時候可以用各種圖表(條形圖,,散點圖,,條形圖,,餅圖,堆疊圖,,3D 圖和地圖圖表…..)來展現(xiàn)分析結(jié)果,。 可以說,,Matplotlib在數(shù)據(jù)科學(xué)的領(lǐng)域是非常好用的數(shù)據(jù)可視化工具。 Python是一門非常適合人工智能開發(fā)的語言,,人工智能所需數(shù)據(jù)獲取,、數(shù)據(jù)分析、數(shù)據(jù)建模的流程都可以通過Python的類庫輕松解決: 網(wǎng)絡(luò)爬蟲庫:requests,、scrapy,、selenium、beautifulSoup 人工智能最重要的是數(shù)據(jù),,怎么獲取巨大的數(shù)據(jù)量呢,?Python的網(wǎng)絡(luò)爬蟲類庫就派上用場了,。爬蟲是一種網(wǎng)絡(luò)機器人,,它可以像真人訪問網(wǎng)絡(luò)一樣源源不斷地抓取你所需要的信息。用Python制作網(wǎng)絡(luò)爬蟲,,你就可以更方便地獲得人工智能時代的最重要的資源——數(shù)據(jù),。 數(shù)據(jù)處理庫:Numpy、scipy,、pandas,、matplotlib 網(wǎng)絡(luò)爬蟲獲取海量數(shù)據(jù),而處理和分析數(shù)據(jù)的工作Python同樣可以解決,。數(shù)據(jù)處理相關(guān)的庫能夠幫助你更加直觀地分析數(shù)據(jù),。這些庫分別可以進(jìn)行矩陣計算、科學(xué)計算,、數(shù)據(jù)處理,、繪圖等操作,有了它們,,你就可以一步步開始把數(shù)據(jù)處理成你需要的格式,。 建模庫:nltk、keras,、sklearn 完成數(shù)據(jù)可視化處理后,,我們就需要利用這些數(shù)據(jù)進(jìn)行建模。這些庫主要是用于自然語言處理,、深度學(xué)習(xí)和機器學(xué)習(xí)的,,把這些用好了,,你的模型就構(gòu)建出來了。 這些類庫為我們提供了從數(shù)據(jù)收集,、數(shù)據(jù)處理和建立模型的一條龍操作,,掌握它們,我們就可以在人工智能的海洋里暢游了,。 04,、規(guī)模效應(yīng) 根據(jù)Stack Overflow網(wǎng)站的來自高收入國家問題閱讀量的主要編程語言趨勢統(tǒng)計,可以看出,,近年來,,Python已然成為目前發(fā)達(dá)國家增長最快的編程語言。 由圖可見,,2012年之后,對于Python相關(guān)問題的瀏覽量迅速增長,,從時間上看,,這一趨勢正好和近幾年人工智能的發(fā)展重合。 語言簡單易學(xué),,支持庫豐富強大,,這兩大支柱從早期就奠定了Python的發(fā)展基礎(chǔ)。技術(shù)的普及推廣就像滾雪球,,早期的積累相對緩慢,,一旦過了臨界點,就是大爆發(fā),。別的不說,,就說現(xiàn)在tensorflow,caffe之類的深度學(xué)習(xí)框架,,主體都是用Python來實現(xiàn),,提供的原生接口也是Python。 正是由于上述4個特點,,Python在人工智能領(lǐng)域中已經(jīng)遙遙領(lǐng)先其他的語言占據(jù)了頭把交椅,。 |
|