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