顯示具有 Numpy 標籤的文章。 顯示所有文章
顯示具有 Numpy 標籤的文章。 顯示所有文章

2018年8月26日 星期日

Python 排序 (sort)

Python裡的排序有很多方法,在這邊歸納整一下。最基本的就是內建的sort()跟sorted()了。要注意的是兩者不大一樣喔。sort()是當場就直接了斷排序了,會改變本來的資料,sorted()是回傳排序後的資料,不影響舊資料:

numpy裡面也有sort函式,好處是速度快,另外跟sorted()一樣,不會改變原來資料:

如果資料是陣列的話,另一個優點是可指定陣列排列的方向:


2018年6月3日 星期日

Python: Numpy介紹

List是Python中常用的資料結構,因Python動態型別的特性,可以建立"異質"的list,例如:

In[1]:  L1 = [2, True, 'a']
           [type(item) for item in L1]
Out[1]: [int, bool, str] 

不過這種"動態"的特性並不是免費的,list中的每一個項目必須包含了資料的型態、大小、參考計數等等額外的資料,所以list的缺乏運算的效率(或者說根本沒法做數學運算),因此若能儲存成同一型態,雖然缺乏型態上的彈性,但卻能大幅增加運算的效率。雖然python提供了標準的array模組,但真的好用且真正多數人使用的是numpy模組。numpy會把陣列中的資料轉成相同的型態,因而提升運算效能:



常用的numpy程式指令:
陣列的串接,可分成水平跟垂直的方式:

陣列的改造,如陣列互換,這個在Machine Learning中常用到,非常重要。

有人喜歡用reshape也可:

陣列分割,np.split()中的second argument是分割的位置:


創建陣列,如.linspace這個在往後繪圖中會常用到:



Universal Function提供了方便的矩陣運算,可以看看下列例子:

numpy內的亂數random也是很常用的,非常非常重要。


random函數其實並不是真的"隨機"取樣,而是偽亂數,就是有亂數的樣子,但實際上是先安排好的,所以其實可以避免每一次取的亂數不同,方法就是利用.RandomState(),argument輸入相同的數字,取得的"亂數"就會相同,可以確保每一次執行都有一樣的結果:

另外也可以使用條件式取得布林陣列(True或是False),並用np.sum()或np.count_nonzero()計算符合運算條件的資料數目,這個在數據的分析上非常有用的。
注意np.sum()可以axis=0 or 1限定以行或列的方向進行運算,另外np.any()、np.all()應該看例子就可以理解用途了。