圖片來源:(https://baike.baidu.hk/item/%E4%BD%A9%E7%89%B9%E6%8B%89/5384575)
圖片來源:NumPy
是Python中用科學計算的基本套件,提供高效能的多維陣列物件和對這些陣列進行操作的工具。在數據科學、機器學習和數值計算中,NumPy是不可或缺的工具
高效能的多維陣列
: NumPy 陣列比 Python 內建的列表速度更快,且佔用更少的記憶體廣泛的數學函數
: 提供大量的數學函數,如三角函數、統計函數、線性代數運算廣泛的生態系統
: 是許多科學計算庫的基礎,例如:SciPy、Pandas、Matplotlib整數型態
int8
、int16
、int32
、int64
分別表示 8 位、16 位、32 位和 64 位 有符號整數
uint8
、uint16
、uint32
、uint64
分別表示 8 位、16 位、32 位和 64 位 無符號整數
浮點數型態
float16
、float32
、float64
分別表示半精度浮點數、單精度浮點數和雙精度浮點數
布林型態
bool
布林值,True 或 False
複數型態
complex64
、complex128
分別表示複數,其中實部和虛部都是 32 位或 64 位浮點數
其他型態
string
定長字串
object
可以存儲任意 Python 對象
import numpy as np
# 創建一個整數型態的陣列
int_arr = np.array([1, 2, 3])
print(int_arr.dtype) # int64
# 創建一個浮點數型態的陣列
float_arr = np.array([1.1, 2.2, 3.3], dtype=np.float32)
print(float_arr.dtype) # float32
# 將整數陣列轉換為浮點數陣列
float_arr_from_int = int_arr.astype(np.float64)
print(float_arr_from_int.dtype) # float64
陣列操作
# 陣列索引
arr = np.array([1, 2, 3, 4, 5])
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[0]) # 取得第一個元素
輸出 1
print(arr2d[1, 2]) # 取得第二行第三列的元素
輸出 6
# 陣列切片
print(arr[1:4]) # 取得索引 1 到 3 的元素
輸出 [2 3 4]
print(arr2d[:, 1]) # 取得第二列的所有元素
輸出 [2 5]
# 陣列運算
print(arr + 2) # 陣列每個元素加 2
輸出 [3 4 5 6 7]
print(arr * 2) # 陣列每個元素乘 2
輸出 [ 2 4 6 8 10]
print(arr2d.dot(arr2d.T)) # 矩陣乘法
輸出
[[14 32]
[32 77]]
# 統計函數
print(arr.mean()) # 計算平均值
輸出 3.0
print(arr.std()) # 計算標準差
輸出 1.4142135623730951
print(arr.max()) # 找到最大值
輸出 5
常用函數
np.random |
產生隨機數 |
---|---|
np.linspace |
產生等差數列 |
np.reshape |
重新塑造陣列的形狀 |
np.transpose |
轉置矩陣 |
np.linalg |
線性代數運算 |
計算向量內積
# 計算兩個向量的內積
vector1 = np.array([1, 2, 3])
vector2 = np.array([4, 5, 6])
dot_product = np.dot(vector1, vector2)
print(dot_product)
輸出 32
從 Python list 或 tuple 建立
import numpy as np
# 一維陣列
list1 = [1, 2, 3, 4]
array1 = np.array(list1)
print(list1)
輸出 [1, 2, 3, 4]
# 二維陣列
list2 = [[1, 2, 3], [4, 5, 6]]
array2 = np.array(list2)
print(list2)
輸出 [[1, 2, 3], [4, 5, 6]]
使用 NumPy 內建函數
np.arange()
產生等差數列
# 產生從 0 到 9 的陣列
array3 = np.arange(10)
print(array3)
輸出 [0 1 2 3 4 5 6 7 8 9]
np.linspace()
產生等差數列,指定起始、結束值和元素個數
# 產生從 0 到 10,有 5 個元素的陣列
array4 = np.linspace(0, 10, 5)
print(array4)
np.zeros()
產生全為 0 的陣列
# 產生一個 3x3 的全零陣列
array5 = np.zeros((3, 3))
print(array5)
np.ones()
產生全為 1 的陣列
# 產生一個 2x4 的全一陣列
array6 = np.ones((2, 4))
print(array6)
np.eye()
產生單位矩陣
# 產生一個 3x3 的單位矩陣
array7 = np.eye(3)
print(array7)
np.random.rand()
產生隨機數陣列 (0, 1) 均勻分布
# 產生一個 2x2 的隨機數陣列
array8 = np.random.rand(2, 2)
print(array8)
np.random.randn()
產生隨機數陣列 標準常態分布
# 產生一個 3x3 的隨機數陣列 (標準常態分布)
array9 = np.random.randn(3, 3)
print(array9)
import numpy as np
# 創建一個一維陣列
arr = np.array([1, 2, 3, 4, 5])
print(arr)
輸出 [1 2 3 4 5]
# 創建一個二維陣列
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d)
輸出
[[1 2 3]
[4 5 6]]
# 產生一個從 0 到 9 的陣列
arr_range = np.arange(10)
print(arr_range)
輸出 [0 1 2 3 4 5 6 7 8 9]
# 產生一個 3x3 的全零陣列
arr_zeros = np.zeros((3, 3))
print(arr_zeros)
輸出
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
# 產生一個 2x2 的全一陣列
arr_ones = np.ones((2, 2))
print(arr_ones)
輸出
[[1. 1.]
[1. 1.]]