摘要:此外,Python也可以用於處理高效的C/C ++算法,以及CUDA/cuDNN的包裝語言,這讓現有的機器學習和深度學習庫可以在Python中高效運行的原因之一。Python語言十全十美嗎。

去年,當地產大佬潘石屹要把學習Python作爲生日禮物送給自己的時候,微博上還多是一陣調侃之聲。可能正是印證了Python程序員們常常掛在嘴邊的“人生苦短,就學Python”的口頭禪,時年56歲的小潘同學要再一次抓住“青春”的尾巴吧。

爲督促自己學習,小潘還在微博專門設置了一個#潘石屹用Python解決100個問題#的話題,鼓勵全民圍觀,監督他的Python學習計劃。顯然,幾個月的堅持,讓小潘同學的Python學習有了初步的成果。5月16號,他在參加完NCT全國青少年編程能力等級測試 Python 編程一級考試後,曬出了99分的優秀成績單。

至於爲啥要學Python,樸實的潘總在接受媒體採訪時表示,人到50歲以後一定要學點新東西,以防止老年癡呆。

但爲什麼選擇要學一個自己完全不懂的Python語言,這還是他在請教了李開復之後得到的啓發:Python語言是現在全世界使用最多的一個編程語言,也是非常成熟的一個語言。

最主要的呢?

未來社會是一個人工智能的社會,學習Python是打開人工智能時代的鑰匙。

Python對於人工智能很重要,對很多關注AI的人們來說想必是個基本常識,但是對於大部分並非專業從事編程的人,比如我來說,Python到底有多重要,其實還是一頭霧水的。

於是我默默地拿起了一本《Python編程:從入門到實踐》……

額,短期學會有點不太現實。我還是本着謙虛好學的態度,梳理下專業人士的觀點,來儘可能地搞清楚“Python之於AI”是一種怎樣的存在吧?

Python爲何能這麼流行?

衡量一門編程語言受歡迎程度的重要指標,可以參考其在Stack Overflow(一家IT問答社區)上面的標籤數量。下圖是近10年來全世界最主要的幾種編程語言在社區平臺的問答帖子中的標籤數量的趨勢圖。

從2012年之後,Python就一直處在穩步上升的趨勢,與此相對照的是其他主流編程語言,除了R語言一直處於停滯不前的狀態,其他編程語言則是在不同程度地穩步下降。

這一指標確實很好地印證了Python的流行程度和普及度。根據專業人士的說法,Python具有以下優點:

一、Python的成熟和易用。

實際上,從1991年,van Rossum向全世界發佈了第一個版本的Python至今已經有30歲的高齡了。但Python卻沒有因爲這種計算機時代略顯“古老”的年齡而走向衰敗,反而因爲Python在可用性和功能性上面取得的平衡,讓越來越多的程序員開始使用這一語言。

一方面簡單易用,一方面又可以用來開發大型的應用程序,這兩個因素結合,正是 Python在上世紀90年代逐漸取得成功的原因。現在,Python語言已經形成一個龐大的成熟社區,一旦人們在編寫Python代碼遇到任何問題,都可以從中找到有用的答案。

二、Python對於初學者非常友好。

從一開始,Python就提供了清晰而明確的語法,使得發人員更容易閱讀和理解代碼,這是衆多程序員喜歡上Python的主要理由。

用三種語言來顯示“Hello World!”爲例,相比起C語言和Java,Python更符合人類直覺的語言形式,對新手而言也更加友好,只需要一句“print”(發佈)就可以了。

用van Rossum的原話來說就是,一門編程語言不僅要告訴計算機該做什麼,還要便於在開發者之間傳遞思想。那還有什麼比使用一種 “符合人性”的編程語言來實現更好的思想交流呢?

第三,Python的功能足夠強大。

經過如此久的迭代開發,Python早已擁有各種各樣的支持庫。用一個形象的比喻來說,Python就像是編程界的“瑞士軍刀”,可以在各種各樣的場合裏用到。比如處理矩陣和向量數據的NumPy、做技術和工程方面的計算的SciPy、數據處理和分析的Pandas以及支持數據可視化的Matplotlib等等支持庫。

需要注意的是,正是Python在支持庫上面的功能擴展,與AI技術發展息息相關。這些正是我們接下來要討論的問題。

爲什麼Python更適合人工智能?

我們知道第三次人工智能浪潮的興起得益於機器學習,特別是深度學習算法的成功。而訓練一個AI算法模型就需要爲其餵養大量的數據。在前期的AI發展中,“有多少智能就有多少人工”就是這一AI訓練過程的典型描述。在這一過程中,Python因其有強大的數據處理的生態庫,因而能夠爲其提供數據的訪問和轉換,實現AI算法的快速“餵養”。

舉個例子,機器學習或者深度學習的算法模型所要處理的數據實際上都是矩陣和向量。而NumPy則正好支持維度數組與矩陣運算,結合Python內置的math和random庫,可以輕鬆通過簡單代碼實現矩陣的轉置、求逆、求和、叉乘、點乘和分解等功能。

而且,NumPy在實現層對矩陣運算做了大量的並行化處理,通過數學運算的精巧,而不是讓用戶自己寫多線程程序,來提升程序效率。有了Python這種強大的數據計算和處理能力,開發者就可以把工作重心放在模型和算法上,不用操心運行的問題了。

就像上面所說,Python其實也是AI技術的“瑞士軍刀”。對於AI訓練所需要的數據獲取、分析、建模等流程也都可以通過Python的各類支出庫來解決。

(用Python訓練和使用一個logistic Regression模型)

比如,像requests、scrapy這類網絡爬蟲庫,可以從網絡上獲得源源不斷地海量數據;像scipy、pandas、matplotlib以及剛剛介紹的NumPy,幫助開發者進行科學計算、數據處理、繪圖以及矩陣計算等操作;而像nltk、keras、sklearn這類用於建模的支持庫,即可用於NLP、DL的模型搭建,實現一個完整的AI算法模型。

此外,Python也可以用於處理高效的C/C ++算法,以及CUDA/cuDNN的包裝語言,這讓現有的機器學習和深度學習庫可以在Python中高效運行的原因之一。

總體而言,Python成爲一門理想的集成語言,可以讓開發者關注真正的問題,而不是花很多時間在細節實現上。

Python語言十全十美嗎?

當然不是,像任何一門編程語言一樣,Python也會有自身的缺陷。

首先,Python的執行速度不夠快。由於Python是一門解釋型語言。編程語言和機器語言之間需要解釋器的翻譯,而Python是一次執行一個任務,因而需要每翻譯一行程序敘述就立刻運行,然後再翻譯下一行再運行,這樣就導致Python要比像C、Java這類編譯型語言執行速度慢的原因。

但對於現在的服務器算力來說,Python速度的劣勢幾乎沒有什麼影響,因爲對於開發者而言根本察覺不到明顯的延時。此外,還可以通過和C語言的結合,將需要優化速度的應用轉換爲編譯好的擴展語言,並在系統中使用Python腳本將這部分應用連接起來,以提高程序的整體效率。

其次,Python源代碼加密困難。Python不像編譯型語言的源程序會被編譯成目標程序,而是會直接運行源程序,因此對源代碼加密比較困難。

此外,Python不太適用於移動開發。Python在設計時並沒有考慮到移動開發,因而還不支持在非x86硬件平臺上編譯代碼,而且Python的測試套件很容易在移動平臺崩潰。隨着移動設備的數量和流量開始遠遠超過PC設備,Python也應該要努力進化以支持移動平臺了。

儘管Python在未來幾年內會依然興盛,但是一些潛在的競爭對手也正在成長——Rust、Go以及Julia。這些語言都各自超過Python的優點,也能修補Python的薄弱環節,正在成爲Stack Overflow近幾年受歡迎趨勢上升很快的三種語言,但是零點幾的份額還不足以挑戰Python。

然而總體上,Python因其開放的開源社區以及全球最多的開發者生態,使其成爲近十年來最成功的編程開發語言之一。

如果列舉Python的廣泛應用,我們可以列舉出一系列的名單。包括人工智能學習框架如Google的TensorFlow 、Facebook的PyTorch、開源社區的神經網絡庫Karas以及雲計算開源平臺OpenStack等使用python實現。此外,Python還在Web開發、操作系統運維、金融大數據分析和圖形GUI上面都是強大的支持工具。

(MIT研究員在通過Python代碼跑出黑洞圖片後,沒有報錯時的小興奮)

如果這些領域還是離我們的日常生活太過遙遠的話,我們不妨就記住Python這樣的一個小應用吧。

還記得去年媒體瘋傳的那張黑洞照片嗎?這張據說用了2年時間拍攝而成的黑洞照片,其實並不是一個望遠鏡拍攝到的,而是採用了遍佈全世界的望遠鏡連接起來,共同拍攝而成的。那麼來自多個望遠鏡拍攝的數據的處理就需要用到Python。

簡單來說,人類看到的第一張真實的黑洞照片,其實是用Python合成的。如果今後有人問起Python能做什麼,你還能記得這個知識點就可以了。

相關文章