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()應該看例子就可以理解用途了。












沒有留言:

張貼留言