如何計算兩個給定 NumPy 陣列的互相關?
互相關是訊號處理和影像處理中廣泛使用的概念,用於確定兩個訊號或影像之間的相似性。Python 作為最流行的程式語言之一,提供了使用 NumPy 庫計算 NumPy 陣列之間互相關的高效且使用者友好的方法。NumPy 庫提供了 numpy.correlate() 函式來計算一維 NumPy 陣列的互相關。但是,對於二維陣列,我們需要先將其展平,然後使用相同的函式計算互相關。
在本文中,我們將詳細討論如何使用 numpy.correlate() 函式計算兩個給定 NumPy 陣列的互相關。我們還將演示使用不同模式計算一維和二維 NumPy 陣列互相關的示例。
numpy.correlate() 的語法
numpy.correlate() 函式的語法如下
numpy.correlate(a, v, mode='valid')
此函式將兩個陣列作為輸入(通常命名為 a 和 v),並計算它們之間的相似性。可以選擇設定 mode 引數來指定輸出陣列的大小。預設情況下,mode 設定為“有效”(valid),這意味著生成的輸出將僅顯示陣列重疊的部分。換句話說,輸出將被裁剪,僅顯示 a 和 v 相似的區域。
示例 1:一維 NumPy 陣列的互相關
讓我們取兩個一維 NumPy 陣列 a 和 v,並計算它們之間的互相關。
現在開啟你的 Python 編輯器,參考以下示例,並確保閱讀註釋以理解程式碼。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
v = np.array([0, 1, 0.5])
# Cross-correlation using 'valid' mode
cross_corr_valid = np.correlate(a, v, mode='valid')
print("Cross-correlation using 'valid' mode:", cross_corr_valid)
# Cross-correlation using the 'same' mode
cross_corr_same = np.correlate(a, v, mode='same')
print("Cross-correlation using 'same' mode:", cross_corr_same)
# Cross-correlation using 'full' mode
cross_corr_full = np.correlate(a, v, mode='full')
print("Cross-correlation using 'full' mode:", cross_corr_full)
輸出
輸出將如下所示
Cross-correlation using 'valid' mode: [2.5 4. 6.5] Cross-correlation using 'same' mode: [2. 2.5 4. 6.5 4. ] Cross-correlation using 'full' mode: [0. 0.5 2. 2.5 4. 6.5 4. 0. ]
在上面的示例中,我們建立了兩個 NumPy 陣列 a 和 v。第一個陣列 a 的形狀為 (5,),第二個陣列 v 的形狀為 (3,)。我們使用 numpy.correlate() 函式和三種不同的模式計算了這兩個陣列的互相關:“有效”(valid)、“相同”(same)和“完整”(full)。
在“有效”(valid)模式下,僅計算兩個陣列重疊部分的互相關。因此,輸出的形狀為 (3,)。在“相同”(same)模式下,輸出的形狀與輸入陣列 a 相同。在“完整”(full)模式下,輸出的形狀為 (7,),這是兩個輸入陣列的長度之和減一。
示例 2:二維 NumPy 陣列的互相關
讓我們取兩個二維 NumPy 陣列 a 和 v,並計算它們之間的互相關。
開啟你的 Python 編輯器,開始建立一個二維陣列,以計算它們之間的互相關。
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) v = np.array([[0, 1], [0.5, 2]])
要計算兩個二維 NumPy 陣列之間的互相關,我們需要將陣列展平為一維陣列,然後應用 numpy.correlate() 函式。
為此,請參考以下程式碼
# Flatten the arrays
a_flat = a.flatten()
v_flat = v.flatten()
# Cross-correlation using 'valid' mode
cross_corr_valid = np.correlate(a_flat, v_flat, mode='valid')
print("Cross-correlation using 'valid' mode:", cross_corr_valid)
# Cross-correlation using the 'same' mode
cross_corr_same = np.correlate(a_flat, v_flat, mode='same')
print("Cross-correlation using 'same' mode:", cross_corr_same)
# Cross-correlation using 'full' mode
cross_corr_full = np.correlate(a_flat, v_flat, mode='full')
print("Cross-correlation using 'full' mode:", cross_corr_full)
輸出
輸出將如下所示
Cross-correlation using 'valid' mode: [27.5 38. 27. ] Cross-correlation using 'same' mode: [13.5 27.5 38. 27. 13.5] Cross-correlation using 'full' mode: [ 0. 4.5 13.5 27.5 38. 27. 13.5 2. ]
在上面的示例中,我們建立了兩個二維 NumPy 陣列 a 和 v。第一個陣列 a 的形狀為 (3, 3),第二個陣列 v 的形狀為 (2, 2)。我們展平了這兩個陣列,然後使用 numpy.correlate() 函式和三種不同的模式計算了互相關:“有效”(valid)、“相同”(same)和“完整”(full)。
在“有效”(valid)模式下,僅計算兩個陣列重疊部分的互相關。因此,輸出的形狀為 (3,)。在“相同”(same)模式下,輸出的形狀與展平的輸入陣列 a 相同。在“完整”(full)模式下,輸出的形狀為 (8,),這是兩個展平的輸入陣列的長度之和減一。
結論
互相關是訊號處理和影像處理中的一個重要概念,它可以幫助測量兩個訊號或影像之間的相似性。幸運的是,Python 的 NumPy 庫提供了一種方便的方法來使用 numpy.correlate() 函式計算互相關。此函式易於使用,可以幫助你比較兩個陣列之間的相似性,無論它們是一維還是二維。透過利用 numpy.correlate() 函式的不同模式,你可以自定義結果以滿足你的特定需求。熟悉此函式在各種應用中都很有價值,包括語音識別、影像分析和模式識別。本文旨在讓你清楚地瞭解如何計算兩個 NumPy 陣列之間的互相關,以及如何有效地利用 numpy.correlate() 函式。透過本文獲得的知識,你將能夠更好地利用互相關在你訊號和影像處理專案中的強大功能。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP