機器學習-Python 01
機器學習中最常用最流行的語言工具現階段應該是Python, 這篇文章主要介紹一些常用的Python語法知識。本篇博文適合那些有其他語言基礎的程式設計師們,如果一點基礎都沒有,我建議先跳過。博主以前是做移動端開發的,所以本篇文章主要是為那些準備知識提升或者轉行的程式設計師們準備的,可以讓你們以最快的速度進入到Python的開發環境。
好了,首先在正式介紹Python的開發之前,大家都知道需要配置開發環境和IDE. 這裡我介紹一下我常用的,叫做Anaconda, 大家可以自行下載,下載過後不用另外配置Python的環境了,因為她已經幫咱們配置好了。下載地址:https://www.anaconda.com/ , 下載過後,你以後每天都需要開啟和操作的就是這個圖片啦,至少所有DataScience和機器學習的工具這裡基本都有。如下圖
開發Python常用的編輯器是Spyder和Jupyter Notebook. 但是因為學校老師教的是Spyder, 這裡以及以後的機器學習我都選擇Spyder啦(懶懶懶)。至於在學習過程中,不斷的需要下載相關庫的話,就點選上圖左上角的Environment,然後自己慢慢去搜,慢慢去找哈,這不是本部落格的重點。好了,下面介紹Python的知識點啦。
1. 變數
和其他語言一個很明顯的區別是,Python的變數是不需要預先定義型別的。這個很牛逼吧,你可能要問,那她是怎麼分配記憶體空間的呢?這個。。。。。。。。。我就不說了(其實是不知道,哈哈哈哈),單這應該是Python動態分配記憶體的機制。
例如,咱們可以直接寫 a = 10, 而不需要跟Java或者OC 中那樣寫 int a = 10. So cool, is it?
2. Operations
顧名思義,Python和任何其他語言一樣,都有加減乘除,取模,取餘數等等算數運算。直接看下面的example更加直觀。
var01 = 10 var02 = 15.5 plus = var01+var02 minus = var01-var02 multiply = var01*var02 divid = var01/var02#這裡直接給的就是浮點數的結果,而不像其他語言那樣只取結果中的整數部分 mod = var01%var02
這裡基本和其他的語言一樣,只有一些細節不同,例如除法運算,Python直接返回的是浮點型的最終結果,這比其他語言要方便的多。
3. Swap(交換變數值)
大家在學習任何一種語言的時候,我拿我英俊瀟灑的面容跟你們打賭,你們一定寫過2個變數值交換的程式碼,而且你們交換值的思路都是定義一箇中間變數,然後交換。(別問我怎麼知道,我也是從這條路上面走過來的。。。。。。。)。我們以前的思路虛擬碼如下:temp = a;
a = b;
b = temp;
是不是又被我猜到了,娃哈哈哈哈哈哈哈哈。 但是!!!!!!!自從我們有了Python,我們就不需要這麼麻煩了,直接一行程式碼搞定,看下面
a = 1 b = 2 a,b = b,a
上面第三行,直接交換a, b的值。我就問你服不服?????
4. 函式定義
學過任何一個語言的人都應該知道函式的重要性,咱直接上程式碼,看看一般函式的定義和格式,然後我在細細解釋一些小細節哈。。。
def least_difference(a,b,c): """ Return the smallest difference between any two numbers among a,b,c """ diff1 = abs(a-b) diff2 = abs(a-c) diff3 = abs(b-c) return min(diff1,diff2,diff3)
首先定義函式的格式是:
def function_name (args):
"""
函式註釋區, 將函式註釋放在這裡。語法中雖然沒有特別要求,但是是一個很好的習慣
""" function_body
這裡需要記住一個小細節,Python中的indent(縮排)不能省略,否則編譯器會報錯。而在其他幾乎所有的主流語言中都不存在這個問題的,只要是新的一行,管你縮排幾個空格符呢。 第二點這裡有個細節就是Python中函式的註釋規則, 一般將這個函式的註釋都寫在上面的函式註釋區間,為什麼這麼做呢???其實你不做也不影響程式碼執行,但是你的專案組長或者專案經理估計得找你談談了。哈哈。 其實寫在這還有一個作用,就是在呼叫help(函式名)是,能將該這一塊的註釋返回並打印出來,這在寫一些公用元件或者API是就顯得尤為重要了。例如
help(least_difference)
呼叫上面一行程式碼後,回返回並列印下面這一句話
Return the smallest difference between any two numbers among a,b,c
是不是很酷,瞬間感覺自己能寫API 了。
5. 條件表達(conditional expression)
Python中的條件表達,如if-else表達基本跟Java等主流語言是一致的,但是就三目運算子這一塊有一點不一樣. 在Python中三目運算子如下所示
outcome = True if grade > 60 else False #ternary operator
6. List
6.1 List 的建立
List幾乎是我們日常中用的評率非常高的一種資料結構。Python中的list的牛逼之處在於,她可以將不同資料型別的元素裝進同一個list。list的建立如下所示
numbers = [1,2,3,4] planets = ['a','b','c','d'] mix = [1,'a',2,'b']#different data types hands = [ ['J', 'Q', 'K'], ['2', '2', '2'], ['6', 'A', 'K'] # (Comma after the last element is optional) ]
6.2 List的index
在Python中,list的index也是zero-index,意思就是從零開始。但是Python的不同之處就在於,她的index,TMD能夠使負數,對!!!是負數,是不是感覺顛覆了以前對於List的認知。但是在Python中,index是負數代表的是從末尾元素開始index的。例如:-1代表最後一個元素的index,-2代表倒數第二個元素,以此類推。具體程式碼示例看下面
print(numbers[0])#result is 1 print(numbers[-1])#result is 4 print(numbers[-2])#result is 3
6.3 slicing
在Python中,無論是Python中的List資料結構,還是後面要學的numpy中的ndarray, slicing都是經常要用到的。 Slicing這個單詞如果直譯過來的意思就是切割(你也可以理解為切糕,哈哈哈),就是從一塊大的切糕中切一小段給你。在Python的List中,slicing的意思是指在List中切出一段出來。這裡的slicing的運用非常靈活,我列舉了下面的幾種方式。另外slicing取值範圍也是包頭不包尾的。
print(planets[:3])#from index-0(include) to index-3(exclude) print(planets[1:])#from index-1(include) to the last element(include last element) print(planets[0:3]) print(planets[-2:-1])#from the last second element(include) to the last element(exclude) print(planets[-2:])#from the last second element(include) to the last element(include)
6.4 List常用的method(functions)
由於list是mutable的,是可以修改的,所以她的method非常靈活且都。這跟我們後面說的一個另外一種資料結構Tuples有很大的區別。常用list的method包括有append, pop,len,index等等,具體有無數種method,你們可以自行去查詢API,下面列舉了一些常用的方法供參考。
planets.append('e')#add a element and place it at the last position len(planets)#return the length of the list planets.pop()#return and remove the last element from the list planets.index('c')#return the index of the element "c"
總結:以上是一些快速入門Python的第一部分,是最基礎的部分,學習要求有其他開發語言的相關經驗或者知識儲備。上面這些最基礎的部分有Python開發環境配置,變數,函式定義,List等。下一節繼續擴充套件一下Python中迴圈,dictionary,Tuples等相關內容。革命已經完成了一小步,同志們仍需努力才是啊。。。哈