
NumPy(Numerical Python)是 Python 資料科學的根基,一個為處理數值資料與高效陣列運算而生的工具。在這套件的世界裡,矩陣(array)不再只是數學符號,而是資料操作的核心主角,從最基本的數列建立、重塑,到進階的數學與邏輯運算,它都是你駕馭資料的第一把鑰匙。
這篇文章將會帶你:
- 了解為什麼 NumPy 是資料科學家的必備工具;
- 建立你的第一個陣列,操作它、切片它、變形它;
- 搭配範例與圖示,拆解每一行看似陌生的語法。
為什麼要學NumPy?
NumPy是一個用於高效數值計算與陣列操作的 Python 函式庫。它提供了一個功能強大的 ndarray(n 維陣列)物件,支援向量化運算、廣播(broadcasting)、矩陣運算、統計計算、隨機數生成等功能。 並且許多更高階的資料科學套件如Pandas、TensorFlow、PyTorch等都會以NumPy為運算的基礎。
因此,熟悉NumPy的運算對於踏入資料科學這個領域是非常重要的一步!!!
🎯 目標:了解 NumPy 陣列的基本操作與語法
NumPy特色
✅ 1. 高效的數值運算
NumPy 使用 C 語言底層實作,比 Python 原生 list 操作更快數十倍。
操作Python ListNumPyfor 迴圈平方慢、需手動快、可向量化資料切片支援但有限完整、快速
✅ 2. 機器學習的基石
大多數機器學習函式庫(如 scikit-learn, TensorFlow, PyTorch):
- 內部運算都是用 NumPy 陣列(或其變體)
- 模型輸入與預測資料幾乎都以 NumPy 陣列表示
🎯 不會 NumPy,等於看不懂大多數機器學習模型的資料處理方式!
✅ 3. 資料前處理的核心工具
NumPy 是 Pandas 的基礎。Pandas 的 DataFrame 裡的數據,實際上是建立在 ndarray 之上。
如果你學會了 NumPy,會更理解:
- Pandas 的 .iloc、.values
- Tensor 的維度與轉換
- 深度學習的矩陣操作(例如 dot, reshape, transpose)
✅ 4. 支援高維與大型數據
NumPy 可以輕鬆操作:
- 2D(矩陣)
- 3D(影像、影片)
- nD(如:多變量時間序列、張量)
🎯它的運算資源使用效能也比純 Python 更優。
⚡NumPy 能做什麼?

🔄 NumPy vs Python List:簡單比較

🧭 小結:為什麼你「一定要」學 NumPy?
✅ 機器學習的底層格式
✅ 深入理解矩陣與向量操作
✅ 提升資料處理效率與可讀性
✅ 為學習 Pandas、Scikit-learn、TensorFlow 打下基礎
🎓 如果你未來要處理任何資料、建模、甚至要做影像分析或強化學習,NumPy 都是不可或缺的基礎工具。
🔢 初識NumPy
🎲1. 匯入 NumPy 並建立陣列
import numpy as np
a = np.array([1, 2, 3]) # 建立一維陣列
b = np.array([[1, 2], [3, 4]]) # 建立二維陣列
# 輸出
print(a) # [1 2 3]
print(b)
# [[1 2]
# [3 4]]
🎲2. 陣列形狀與維度
print(a.shape) # (3,)
print(b.shape) # (2, 2)
print(b.ndim) # 2 維
說明
- .shape:回傳每個維度的大小(很重要!!!)
- .ndim:回傳陣列的維度數量
🎲3. 常用陣列建立方式
np.zeros((2, 3)) # 建立全為 0 的 2x3 陣列
np.ones((2, 2)) # 建立全為 1 的 2x2 陣列
np.eye(3) # 單位矩陣 (3x3)
np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1.]
# 輸出
print(np.zeros((2, 3)))
#[[0., 0., 0.],
# [0., 0., 0.]]
說明
- np.zeros: 常用於建立初始陣列(很重要!!!)
- np.ones: 常用於建立初始陣列
- np.arange(start, stop, step, dtype)
- start : 從某數開始,預設為0
- stop : 到某數停止(不包含)
- step : 間格多少
- dtype : bool(布林值), int(整數), float(浮點數), complex(複數)
- np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
- start : 從某數開始
- stop : 到某數停止
- num : start到stop之間有多少數字
- endpoint : True(包含stop); False(不包含stop),預設為True
- restep : 若是True,則會在array的後面,加上間隔多少,預設為False
- dtype : bool(布林值), int(整數), float(浮點數), complex(複數)
🎲4. 陣列索引與切片
x = np.array([10, 20, 30, 40]) # 建立一維陣列
# 輸出
print(x[1]) # 20
print(x[1:3]) # [20 30]
說明
- 運用索引(index)和切片(slicing)可以從陣列中取出特定範圍的值(很重要!!!)
- python的index從0開始
➕5. 基本運算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 輸出
print(a + b) # [5 7 9]
print(a * b) # [ 4 10 18]
print(a ** 2) # [1 4 9]
print(a / 2) # [0.5, 1, 1.5]
說明
- 陣列可以進行基本的加減乘除等運算
- 亦可進行進階的矩陣運算
➗6. 基礎數學運算
a = np.arange(3) # 產生一個一維陣列: [0, 1, 2]
b = np.sqrt(a) # 對每個數值開根號
c = np.exp(a) # 以e為底,數值為指數
d = np.log(a) # 將數值取log
e = np.sin(a) # 將數值取sin
f = np.cos(a) # 將數值取cos
m = np.maximum(x, y) # 取出x, y中比大的數值
n = np.sign(x) # 判斷x的正負號,1.為正,-1.為負
p = np.floor(x) # 地板函數,為不大於數值的最大整數
q = np.ceil(x) # 天花板函數,為不小於數值的最小整數
說明
- 數學運算很多函數可以用,在此列出常用的幾種