[Python] Numpy 學習筆記: 入門篇[np-001]
本篇文章將介紹我在學習Numpy應用的筆記學。
內容架構結合了w3school以及我在工研院上AI課程的筆記,以下皆有透過colab連結,以.ipynb檔讀取,可以登入Google帳戶查看。架構如:
- 入門: numpy獨有的ndarray操作(陣列重塑、合併、切割、搜尋)。
- Random: 透過隨機模組生成模擬資料。
- ufunc: 通用函數,numpy的加減乘除,與廣播功能(Broadcasting)。
- 練習題: 就是更多的練習。
一、入門篇 Basic
import numpy as np
print(np.__version__) #1.19.5
引入Numpy 很容易,而大家通常通會將其簡寫 as 為 "np"。
如 Pandas → pd, matplotlib → plt, random → rm 都是常見的縮寫。
而在numpy的容器是全新的,對比於過去使用的list,array有強大的運算功能,建構方式主要有兩種。
np.array([1, 2, 3, 4, 5])
np.array((1, 2, 3, 4, 5))# 兩者輸出結果皆為
# [1 2 3 4 5]
# <class ‘numpy.ndarray’>
也可以快速的建立高維度資料與進行資料處理(data processing)。
a = np.array(42)
b = np.array([1, 2, 3, 4, 5])
c = np.array([[1, 2, 3], [4, 5, 6]])
d = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])# 其維度分別為0, 1, 2, 3
# 可以透過如 d.ndim查看,結果為return維度
np.array處理
index取值的概念如同List,起始值為0,負數為倒序取值。
也可以透過step設置,進行間隔取值。
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5]) #[2 3 4 5]
print(arr[5:]) #[6 7]
print(arr[-2:]) #[6 7]
print(arr[1:6:2]) #[2 4 6]
print(arr[::2]) #[1 3 5 7]
拓展到多維度就有趣了,我們可以透過「 , 」來選擇針對不同維度取對應的數值。
進行資料處理的過程中也要特別注意,若希望保存原本的array,要採用copy(),而不是view()。
而維度與資料長度的確認,我們更常使用到的是shape這個函數。
需要注意若跨維度資料長度不一,會只顯示維度數值。
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(arr.shape) #(2, 4)意思為維度2, 資料長度為5
維度切換/資料重塑 Reshape
在進行資料處理時,由於維度在進行運算時,需要特別注意是否可以進行內積運算或其他處理,或是將1-D資料轉換為2-D。
reshape過的array也可以透過(-1)進行還原。
或者若已知要切割為多少維度,但不確認資料長度為何,也可以塞入(-1)讓numpy自動運算。
arr = np.array([1,2,3,4,5,6,7,8,9,10,11,12])
newarr = arr.reshape(2, 6)print(newarr) #[[ 1 2 3 4 5 6] [ 7 8 9 10 11 12]]
newarr.shape #(2, 6)
print(newarr.reshape(-1)) #[ 1 2 3 4 5 6 7 8 9 10 11 12]
資料合併/分割 concatenate / split
可以透過concatenate這個函數快速拼接array。
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.concatenate((arr1, arr2))print(arr) # [1 2 3 4 5 6]
也可以透過split進行資料切割。
arr = np.array([1,2,3,4,5,6])
newarr = np.array_split(arr, 2)print(newarr) # [array([1, 2, 3]), array([4, 5, 6])]
注意分割以後newarr的index例如newarr[0]=array([1, 2, 3])。
資料排序 sort
預設為升序排序,意即數字小到大,英文字母a-z。
arr = np.array([3, 2, 0, 1])
print(np.sort(arr)) #[0 1 2 3]arr = np.array([‘banana’, ‘cherry’, ‘apple’])
print(np.sort(arr)) #['apple' 'banana' 'cherry']arr = np.array([True, False, True])
print(np.sort(arr)) #[False True True]arr = np.array([[3, 2, 4], [5, 0, 1]])
print(np.sort(arr)) #[[2 3 4] [0 1 5]]
資料篩選 filter
進行資料篩選時,要先建立起篩選器,譬如建立一個true/false的list。
arr = np.array([41, 42, 43, 44])
x = [True, False, True, False]
newarr = arr[x]
# [41 43]