Numpy(Numerical Python)是一個用於Python語言的數值計算庫,它支持高維數組和矩陣運算,可以用於科學計算、數據分析和機器學習等應用。本文將從多個方面對numpy模塊做詳細的闡述。
一、數組
Numpy中的核心數據結構是ndarray(N-dimensional array,多維數組),它是一個有相同數據類型元素的固定大小的數組。相比於Python原生的列表,ndarray在內存中存儲時更加緊湊和高效,支持向量化運算,使得元素之間的數學運算更加方便。
1.數組的創建與索引
import numpy as np
a = np.array([1, 2, 3]) # 創建一維數組
print(a) # [1 2 3]
print(a[0]) # 1
b = np.array([[1, 2, 3], [4, 5, 6]]) # 創建二維數組
print(b)
# [[1 2 3]
# [4 5 6]]
print(b[0, 1]) # 2
2.數組的操作
Numpy提供了豐富的數組操作函數,包括常用的數學運算、統計函數、數組轉置、變形、拼接、切片等。
a = np.array([1, 2, 3])
print(np.exp(a)) # [ 2.71828183 7.3890561 20.08553692]
print(np.sum(a)) # 6
print(np.mean(a)) # 2.0
print(np.reshape(a, (3, 1)))
# [[1]
# [2]
# [3]]
二、隨機數
Numpy中的random模塊提供了各種生成隨機數的函數,包括正態分佈、均勻分佈、冪律分佈等,可以用於模擬實驗、算法測試等場合。
1.生成隨機數
import numpy as np
a = np.random.normal(loc=0.0, scale=1.0, size=(2, 3)) # 生成標準正態分佈隨機數
print(a)
# [[-1.22553125 0.46581273 0.69259882]
# [-0.86993335 0.53642977 -0.83448222]]
b = np.random.randint(low=0, high=10, size=(2, 3)) # 生成0~9之間的隨機整數
print(b)
# [[6 7 5]
# [5 4 6]]
2.隨機數種子
通過設置隨機數種子可以使得每次生成的隨機數序列都相同,這在實驗重現和調試中非常有用,可以保證程序的可復現性。
import numpy as np
np.random.seed(0)
a = np.random.randint(low=0, high=10, size=(2, 3)) # 設置隨機數種子
print(a)
# [[5 0 3]
# [3 7 9]]
np.random.seed(0)
b = np.random.randint(low=0, high=10, size=(2, 3))
print(b)
# [[5 0 3]
# [3 7 9]]
三、線性代數
Numpy中的linalg模塊提供了各種線性代數運算函數,包括矩陣乘法、逆、特徵值、奇異值等,可以用於解線性方程組、特徵分解、主成分分析等任務。
1.矩陣運算
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.dot(a, b)) # 矩陣乘法
# [[19 22]
# [43 50]]
print(np.linalg.inv(a)) # 矩陣的逆
# [[-2. 1. ]
# [ 1.5 -0.5]]
eigenvalues, eigenvectors = np.linalg.eig(a) # 矩陣的特徵值和特徵向量
print(eigenvalues) # [-0.37228132 5.37228132]
print(eigenvectors)
# [[-0.82456484 -0.41597356]
# [ 0.56576746 -0.90937671]]
2.線性方程組解
使用numpy.linalg.solve函數可以求解形如Ax = b的線性方程組。
A = np.array([[1, 2], [3, 4]])
b = np.array([1, 2])
x = np.linalg.solve(A, b)
print(x) # [-0.5 1. ]
四、文件操作
numpy提供了方便的對二進制文件、csv文件和文本文件等常見格式的讀寫函數。
1.二進制文件
a = np.array([1, 2, 3])
np.save("a.npy", a) # 保存為二進制文件
b = np.load("a.npy") # 從二進制文件讀取
print(b) # [1 2 3]
2.csv文件
a = np.array([[1, 2], [3, 4]])
np.savetxt("a.csv", a, delimiter=",") # 保存為csv文件
b = np.loadtxt("a.csv", delimiter=",") # 從csv文件讀取
print(b)
# [[1. 2.]
# [3. 4.]]
3.文本文件
a = np.array([1, 2, 3])
np.savetxt("a.txt", a, fmt="%d") # 保存為文本文件
b = np.loadtxt("a.txt", dtype=np.int) # 從文本文件讀取
print(b) # [1 2 3]
五、性能優化
Numpy中的廣播(broadcasting)機制和向量化運算是提高程序性能的關鍵。如果使用正確,可以使得程序在數組操作時避免使用循環,從而提高了運行效率。
1.廣播
Numpy中的廣播機制可以自動將不同形狀的數組轉換為相同形狀,從而使得它們可以參與元素級別的運算。
a = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(a + b)
# [[11 22]
# [13 24]]
2.向量化運算
使用numpy的向量化運算可以使得程序更加簡潔、易讀、易維護。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.zeros(3)
for i in range(3):
c[i] = a[i] + b[i] # 使用循環
print(c) # [5. 7. 9.]
c = a + b # 使用向量化運算
print(c) # [5 7 9]
六、總結
Numpy模塊是Python中非常重要的數值計算庫,支持高維數組和矩陣運算,提供了豐富的數學庫函數和文件操作函數。在數據科學和機器學習等領域中,常常需要使用numpy模塊來進行數據處理和建模。本文從數組、隨機數、線性代數、文件操作和性能優化等多個方面對numpy模塊進行了詳細的闡述,希望讀者們通過本文的學習可以對numpy模塊有更深入的理解。
原創文章,作者:SEZCQ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/370530.html