-
1 # 小不丁丁
-
2 # IT人渝村阿澤
作為一個以python為主要程式語言的程式設計師,我談談自己的的看法。
至於學python是不是一定要會演算法,我們可以從python的主要應用領域來考慮。
1,第一個主要應用領域是web開發,web開發的框架很多,比如比較出名的Django等。你需要掌握的知識包括python開發框架,資料庫,前端知識,linux系統,資料結構等等 整體來說對演算法的要求不是很高。
2,第二主要應用領域是自動化運維,比如saltstack等自動化平臺。除了資料庫,linux系統等,還要學nagios,buildbot等自動化運維監控,部署等工具。對演算法的要求不是特別高。
3,第三個主要應用是科學計算,需要掌握numpy,scipy,matplotlib等眾多數值處理工具,對機器學習演算法學習有一定要求,python非常適合做科學計算,繪製高質量2d和3d的影象等。
4,第四個主要應用是爬蟲,大部分網際網路公司都會佈置自己網路爬蟲,網路爬蟲的效率和準確性是至關重要的,所以對資料結構和演算法的要求比較高。
5,第五個主要應用是資料分析,這是python應用的主要領域之一,對機器學習,深度學習有很高的要求。
6,第六個主要應用是人工智慧,演算法崗,需要對大量機器學習,深度學習,神經網路有深入的理解。
但是,python中的資料分析的,人工智慧,爬蟲,科學計算,是主流應用領域,有大量就職崗位需求。python web開發,python自動化運維就業市場比較窄。
所以說如果學python就業建議學習演算法,對於web開發等崗位,java或許是更好的選擇。
-
3 # 江蘇優就業
首先,資料結構和演算法是程式設計師的基本功,學了只有好處沒有壞處。
然後,Python語言內建了很多資料型別、標準庫,一定要懂常見演算法的原理和基本實現方式。
如果計劃往人工智慧領域發展,機器學習是數學,必須掌握一些必要的數學基礎,學工作上實際有用到的,比如是微積分、機率論、線性代數、凸最佳化等這些。資料分析裡需要應用到的內容也需要掌握,演算法方面需要掌握一些基本的框架:python、spark、mllib、scikit-learning、pytorch、TensorFlow,資料方面需要懂得HQL、numpy、pandas,如果你本身是後臺開發、app開發、資料分析、專案管理,則是一個學習演算法的一個加分項。
-
4 # 北大青鳥海南大立校區
忘記從哪裡聽過這句話了,個人覺得很適合回答你這個問題:“雖然當下大部分流行的高階語言都自帶了對常用資料結構的支援,而且多半你無法給出更加優秀的實現,但是繼續學習資料結構的動力在於:它讓你學會選擇一個正確且合適的資料結構去解決一個具體的問題。
”尤其是Python這樣的語言,built-in的這些資料結構:list, dict, set...似乎是萬能的(的確,有些時候確實是萬能的)。但如果你瞭解它們背後的具體實現,就會發現,看似完美的資料結構,卻未必是合適之選。
比如記憶體空間惜“字”如金,主要目的是順序存取,而完全不需要動態擴充套件的情況下,list就沒有傳統的array合適,具體的原因可以去了解一下list的實現原理。推薦一本書吧:《Data Structures and Algorithms Using Python》,網上可以下載到高畫質的pdf。書中除了講述了幾種常用資料結構棧、佇列、二叉樹等的Python實現,特別值得推薦的是,還對Python的幾個built-in資料結構的實現進行了具體的分析。相信會有幫助。唯一不足的是,只有英文版的,耐心讀一下吧,會有一種豁然開朗的感覺。
-
5 # 程式設計DaXia
1,Python的定義是什麼:
Python,(發音:paɪθən)是一種面向物件、直譯式電腦程式語言,也是一種功能強大的通用型語言,已經具有近二十年的發展歷史,成熟且穩定。它包含了一組完善而且容易理解的標準庫,能夠輕鬆完成很多常見的任務。它的語法非常簡捷和清晰,與其它大多數程式設計語言不一樣,它使用縮排來定義語句。
2,Python可以用來做什麼?
Web開發、科學計算、網路爬蟲、等等
3,學習Python是否一定要演算法?
題目:
有四個數字:1、2、3、4,能組成多少個互不相同且無重複數字的三位數?各是多少?
程式分析:
可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去 掉不滿足條件的排列。
程式原始碼:在Python 2.0+中除錯透過
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if( i != k ) and (i != j) and (j != k):
print i,j,k
以上例項輸出結果為:
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
從上面的例項中我們可以看出,掌握一定的演算法對於學習Python還是很有必要的,所以我們在以後的學習中,除了基本知識外,相關的演算法原理也要熟記於心,這樣才能寫出優質的程式。
-
6 # 肥貓技術生活
剛開始入門時,不是必須學好演算法的。但是隨著技術的深入,演算法還是需要的,不然只能乾點"搬磚"的活兒。
1、學好軟體開發離不開計算機理論基礎,如資料結構、作業系統、網路技術、演算法研究等。如果熱愛這門技術,這些都是不問題,先入門,這些慢慢的都可以補上。
2、關於演算法,它是軟體開發的靈魂,沒有好的演算法寫不出優秀的程式。
3、如何學習演算法,首先選取經典演算法教材。基礎的可以先從《資料結構》學起,裡面有些基礎演算法,然後再去學專門的演算法(其實把資料結構範疇的演算法學好,一般就夠用了)。還有網上有很多論壇,演算法網站,為了吸引眼球 一般都做的淺顯易懂。還有大部分演算法為c語言,但語言在演算法層面都相通的,明白演算法模型才是最重要的。
4、萬事開頭難,只要入門,剩下的就是慢慢經營這門技術就行了。演算法在實踐中學的最快也最牢固。
-
7 # 小小程式設計師玲兒
百戰程式設計師IT問題專業解答
剛開始入門不是必須學好演算法的,但是隨著技術的深入,還是需要的,不然只能乾點"搬磚"的活兒。
1.學好軟體開發離不開 計算機理論基礎 ,如資料結構、作業系統、網路技術、演算法研究等,如果熱愛這門技術,這些都是不問題,先入門,這些慢慢的都可以補上。
2.關於演算法,它是軟體開發的靈魂,沒有好的演算法寫不出優秀的程式。
3.如何學習演算法,首先選取經典演算法教材,基礎的先從《資料結構》學起,裡面有些基礎演算法,然後再去學專門的演算法(其實把資料結構範疇的演算法學好,一般就夠用了),還有網上有很多論壇,演算法網站,為了吸引眼球 一般都做的淺顯易懂。還有大部分演算法為c語言,但語言在演算法層面都相通的,明白演算法模型才是最重要的
4.萬事開頭難,只要入門,剩下的就是慢慢經營這門技術就行了。演算法在實踐中學的最快也最牢固。
-
8 # IT人劉俊明
這是一個非常好的問題,很多Python初學者都有類似的疑問,作為一名IT從業者,我來回答一下。
首先,Python語言之所以在近兩年有比較明顯的上升趨勢,一個重要的原因是Python語言在大資料和人工智慧領域的應用比較多,而這兩個領域的開發任務往往都離不開演算法,所以具有一定的演算法設計基礎,對於Python程式設計師的發展具有比較重要的意義。
從學習Python語言本身來說,即使沒有演算法基礎也是完全可以學習的,而且Python語言本身也比較簡單易學。隨著工業網際網路的發展,未來職場人掌握一定的Python開發知識也會在一定程度上提升自身的崗位附加值。
如果想透過學習Python進入IT(網際網路)行業發展,那麼演算法知識還是比較重要的,當前附加值比較高的Python開發崗位,往往都需要具有一定的演算法設計和實現能力。以大資料領域為例,Python程式設計師既可以從事大資料分析崗位(演算法崗位),也可以從事大資料開發崗位,而這兩個崗位都需要程式設計師具有一定的演算法基礎。從近兩年研究生的就業情況來看,大資料開發崗位的招聘數量要更多一些,而且崗位附加值與演算法崗位也基本持平了。
雖然當前IT行業內的Python崗位數量比較多,但是很多Python崗位對於程式設計師的要求還是比較高的,所以如果數學基礎比較薄弱,並不建議從Python開始學起,因為就業還是會有一定難度的。對於數學基礎比較薄弱的初學者來說,學習Java語言往往是比較現實的選擇,相對於Python開發崗位來說,Java初級開發崗位對於程式設計師的要求往往並不高。
-
9 # 北大青鳥中博軟體學校
入門學python是不需要演算法水平的。只要具備一點英語水平,就可以看懂了。
當入門學了一段時間後,你會需要了解一些高階的庫和框架,比如flask,django或者一些人工智慧的資料處理,需要有一定的演算法潛力了,不過也不會涉及多高深的演算法,這要到機器學習才會用到。
如果你不去研究人工智慧、演算法這塊,基本是沒有什麼問題。
另外,影響學習的另一重要點就是要學會搜尋,遇到問題自己搜尋答案,或者查詢官方文件。
回覆列表
不一定!但是python的主要用途是:用於資料處理類的語言,所以,學習python還是會涉及演算法。常用的一些庫均具有演算法功能:
1、資料分析統計資料:
(1) NumPy:NumPy 是科學應用程式庫的主要軟體包之一,用於處理大型多維陣列和矩陣,它大量的高階數學函式集合和實現方法使得這些物件執行操作成為可能。
(2)PanDas:Pandas 是一個 Python 庫,提供高階的資料結構和各種各樣的分析工具。這個軟體包的主要特點是能夠將相當複雜的資料操作轉換為一兩個命令。Pandas包含許多用於分組、過濾和組合資料的內建方法,以及時間序列功能。
(3) SciPy:科學計算的另一個核心庫是 SciPy。它基於 NumPy,其功能也因此得到了擴充套件。SciPy 主資料結構又是一個多維陣列,由 Numpy 實現。這個軟體包包含了幫助解決線性代數、機率論、積分計算和許多其他任務的工具。此外,SciPy 還封裝了許多新的 BLAS 和 LAPACK 函式。
(4)StatsModels:Statsmodels 是一個 Python 模組,它為統計資料分析提供了許多機會,例如統計模型估計、執行統計測試等。在它的幫助下,你可以實現許多機器學習方法並探索不同的繪圖可能性。
2、圖形視覺化:
(1)Matplotlib:Matplotlib 是一個用於建立二維圖和圖形的底層庫。藉由它的幫助,你可以構建各種不同的圖示,從直方圖和散點圖到費笛卡爾座標圖。此外,有許多流行的繪相簿被設計為與matplotlib結合使用。
(2)Seaborn:Seaborn 本質上是一個基於 matplotlib 庫的高階 API。它包含更適合處理圖表的預設設定。此外,還有豐富的視覺化庫,包括一些複雜型別,如時間序列、聯合分佈圖(jointplots)和小提琴圖(violin diagrams)。
(3)Plotly:Plotly 是一個流行的庫,它可以讓你輕鬆構建複雜的圖形。該軟體包適用於互動式 Web 應用程,可實現輪廓圖、三元圖和三維圖等視覺效果。
(4)Bokeh:Bokeh 庫使用 JavaScript 小部件在瀏覽器中建立互動式和可縮放的視覺化。該庫提供了多種圖表集合,樣式可能性(styling possibilities),連結圖、新增小部件和定義回撥等形式的互動能力,以及許多更有用的特性。
(5)Pydot :Pydot 是一個用於生成複雜的定向圖和無向圖的庫。它是用純 Python 編寫的Graphviz 介面。在它的幫助下,可以顯示圖形的結構,這在構建神經網路和基於決策樹的演算法時經常用到。
3、機器學習
(1)Scikit-learn:這個基於 NumPy 和 SciPy 的 Python 模組是處理資料的最佳庫之一。它為許多標準的機器學習和資料探勘任務提供演算法,如聚類、迴歸、分類、降維和模型選擇。利用 Data Science School 提高你的技能。
(2)XGBoost / LightGBM / CatBoost:梯度增強演算法是最流行的機器學習演算法之一,它是建立一個不斷改進的基本模型,即決策樹。因此,為了快速、方便地實現這個方法而設計了專門庫。就是說,我們認為 XGBoost、LightGBM 和 CatBoost 值得特別關注。它們都是解決常見問題的競爭者,並且使用方式幾乎相同。這些庫提供了高度最佳化的、可擴充套件的、快速的梯度增強實現,這使得它們在資料科學家和 Kaggle 競爭對手中非常流行,因為在這些演算法的幫助下贏得了許多比賽。
(3)Eli5:通常情況下,機器學習模型預測的結果並不完全清楚,這正是 Eli5 幫助應對的挑戰。它是一個用於視覺化和除錯機器學習模型並逐步跟蹤演算法工作的軟體包,為 scikit-learn、XGBoost、LightGBM、lightning 和 sklearn-crfsuite 庫提供支援,併為每個庫執行不同的任務。
4、深度學習
(1)TensorFlow:TensorFlow 是一個流行的深度學習和機器學習框架,由 Google Brain 開發。它提供了使用具有多個數據集的人工神經網路的能力。在最流行的 TensorFlow應用中有目標識別、語音識別等。在常規的 TensorFlow 上也有不同的 leyer-helper,如 tflearn、tf-slim、skflow 等。
(2)PyTorch:PyTorch 是一個大型框架,它允許使用 GPU 加速執行張量計算,建立動態計算圖並自動計算梯度。在此之上,PyTorch 為解決與神經網路相關的應用程式提供了豐富的 API。該庫基於 Torch,是用 C 實現的開源深度學習庫。
(3)Keras:Keras 是一個用於處理神經網路的高階庫,執行在 TensorFlow、Theano 之上,現在由於新版本的釋出,還可以使用 CNTK 和 MxNet 作為後端。它簡化了許多特定的任務,並且大大減少了單調程式碼的數量。然而,它可能不適合某些複雜的任務。
5、分散式深度學習
(1)Dist-keras / elephas / spark-deep-learning:隨著越來越多的用例需要花費大量的精力和時間,深度學習問題變得越來越重要。然而,使用像 Apache Spark 這樣的分散式計算系統,處理如此多的資料要容易得多,這再次擴充套件了深入學習的可能性。因此,dist-keras、elephas 和 spark-deep-learning 都在迅速流行和發展,而且很難挑出一個庫,因為它們都是為解決共同的任務而設計的。這些包允許你在 Apache Spark 的幫助下直接訓練基於 Keras 庫的神經網路。Spark-deep-learning 還提供了使用 Python 神經網路建立管道的工具。
(2) NLTK:NLTK 是一組庫,一個用於自然語言處理的完整平臺。在 NLTK 的幫助下,你可以以各種方式處理和分析文字,對文字進行標記和標記,提取資訊等。NLTK 也用於原型設計和建立研究系統。
(3)SpaCy :SpaCy 是一個具有優秀示例、API 文件和演示應用程式的自然語言處理庫。這個庫是用 Cython 語言編寫的,Cython 是 Python 的 C 擴充套件。它支援近 30 種語言,提供了簡單的深度學習整合,保證了健壯性和高準確率。SpaCy 的另一個重要特性是專為整個文件處理設計的體系結構,無須將文件分解成短語。
(4)Gensim :Gensim 是一個用於健壯語義分析、主題建模和向量空間建模的 Python 庫,構建在Numpy和Scipy之上。它提供了流行的NLP演算法的實現,如 word2vec。儘管 gensim 有自己的 models.wrappers.fasttext實現,但 fasttext 庫也可以用來高效學習詞語表示。
6、資料採集:爬蟲
(1)Scrapy:Scrapy 是一個用來建立網路爬蟲,掃描網頁和收集結構化資料的庫。此外,Scrapy 可以從 API 中提取資料。由於該庫的可擴充套件性和可移植性,使得它用起來非常方便。
(2)resquests:requests庫是一個常用的用於http請求的模組,它使用python語言編寫,可以方便的對網頁進行爬取,是學習python爬蟲的較好的http請求模組。