一、NumPy簡介
NumPy是Python語言中最重要的科學計算庫之一,它提供了高效的多維數組對象和基於數組的函數,可以用於對大量數據進行快速的數據處理和科學計算。與Python內置的列表不同,NumPy數組是一種特殊的數組類型,它可以存儲任意維度的數字,支持快速的數值運算和邏輯運算,並提供了各種數學函數和統計函數。除了數值計算之外,NumPy還有許多其他應用,例如圖像處理、信號處理、文本處理等等。
NumPy於2005年首次發布,目前最新版本為1.20.1版。
二、NumPy數組的創建與訪問
NumPy數組可以通過多種方式來創建,最常見的方法是使用array()函數將Python的列表或元組轉換為數組。例如:
import numpy as np
# 創建一維數組
a = np.array([1, 2, 3, 4, 5])
print(a) # [1 2 3 4 5]
# 創建二維數組
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
# [[1 2 3]
# [4 5 6]]
NumPy數組可以使用下標訪問元素,與Python的列表類似:
a = np.array([1, 2, 3, 4, 5])
print(a[0]) # 1
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b[1, 2]) # 6
另外,NumPy還提供了一些方便的函數來創建特定類型的數組,例如zeros()函數可以返回一個全是0的數組:
c = np.zeros(5)
print(c) # [0. 0. 0. 0. 0.]
三、NumPy數組的運算與操作
NumPy數組有多種數值運算和邏輯運算,可以對數組進行各種操作。
例如,可以對數組進行加、減、乘、除等運算:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9]
print(a - b) # [-3 -3 -3]
print(a * b) # [ 4 10 18]
print(b / a) # [4. 2.5 2. ]
還可以使用各種廣播功能來處理不同形狀的數組,例如:
A = np.array([[1, 2], [3, 4]])
b = np.array([10, 20])
print(A * b)
# [[10 40]
# [30 80]]
此外,NumPy還提供了一些常見的數組操作函數,例如reshape()函數可以改變數組的形狀:
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)
print(b)
# [[1 2 3]
# [4 5 6]]
四、NumPy數組的統計函數
NumPy還提供了許多用於數組統計的函數,例如最小值min()、最大值max()、平均值mean()等等,以下是一些常用函數的示例:
a = np.array([1, 2, 3, 4, 5, 6])
print(np.min(a)) # 1
print(np.max(a)) # 6
print(np.mean(a)) # 3.5
print(np.median(a)) # 3.5
可以對多維數組進行統計操作,可以使用axis參數來指定沿哪個軸進行操作。
b = np.array([[1, 2, 3], [4, 5, 6]])
print(np.min(b, axis=0)) # [1 2 3]
print(np.max(b, axis=1)) # [3 6]
五、NumPy數組的應用
NumPy數組廣泛應用於科學計算、數據分析和機器學習等領域。以下是一些常見的應用示例。
(1)圖像處理
圖像是像素的二維數組,可以使用NumPy數組來進行圖像的讀取、處理和繪製等操作。
import numpy as np
from PIL import Image
# 使用Pillow庫來讀取圖片
img = Image.open('test.jpg')
# 將圖片轉換為NumPy數組
img_arr = np.array(img)
# 顯示圖片
import matplotlib.pyplot as plt
plt.imshow(img_arr)
(2)信號處理
信號是數字信號的一維或二維數組,可以使用NumPy數組來進行信號處理、濾波和譜分析等操作。
import numpy as np
import scipy.signal as signal
# 生成一個正弦函數
t = np.linspace(0, 1, 1000, endpoint=False)
x = np.sin(2 * np.pi * 5 * t)
# 給正弦函數加上一些隨機雜訊
x = x + 0.1 * np.random.randn(len(x))
# 使用NumPy和SciPy庫來進行信號處理
b, a = signal.butter(4, 0.1)
y = signal.filtfilt(b, a, x)
# 顯示信號
import matplotlib.pyplot as plt
plt.plot(t, x, 'r-', linewidth=1)
plt.plot(t, y, 'b-', linewidth=2)
plt.show()
(3)文本處理
文本數據可以表示為字元串的一維數組或二維數組,可以使用NumPy數組來進行文本處理、特徵提取和分類等操作。
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
# 創建一個文本數組
texts = np.array([
'I love Python.',
'Python is a programming language.',
'Python is better than Java.'
])
# 使用CountVectorizer來提取文本特徵
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
# 將稀疏矩陣轉換為密集矩陣
X = X.todense()
# 將特徵矩陣轉換為DataFrame格式
df = pd.DataFrame(X, columns=vectorizer.get_feature_names())
# 顯示特徵矩陣
print(df)
以上是NumPy數組的部分應用,總的來說,NumPy數組是Python語言中最重要的科學計算庫之一,它提供了高效的數據處理和科學計算工具,可以幫助人們方便地處理各種數據,從而在科學研究、工程設計和商業應用等領域展開更深入的探索。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286746.html