[Python] Numpy 學習筆記: 入門篇[np-001]

ChunJen Wang
jimmy-wang
Published in
5 min readApr 11, 2021

本篇文章將介紹我在學習Numpy應用的筆記學。

內容架構結合了w3school以及我在工研院上AI課程的筆記,以下皆有透過colab連結,以.ipynb檔讀取,可以登入Google帳戶查看。架構如:

  1. 入門: numpy獨有的ndarray操作(陣列重塑、合併、切割、搜尋)。
  2. Random: 透過隨機模組生成模擬資料。
  3. ufunc: 通用函數,numpy的加減乘除,與廣播功能(Broadcasting)。
  4. 練習題: 就是更多的練習。
Source: https://towardsdatascience.com/how-to-create-numpy-arrays-from-scratch-3e0341f9ffea

一、入門篇 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]

Source:https://www.w3schools.com/python/numpy/default.as

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^