บทนำ
ในการคืนคอนโวลูชันเชิงเส้นแบบดิสครีต (discrete linear convolution) ของลำดับ 1 มิติ สองลำดับ สามารถใช้เมธอด numpy.convolve() ใน NumPy ของ Python คอนโวลูชันมักใช้ในการประมวลผลสัญญาณ (signal processing) และทฤษฎีความน่าจะเป็น
พารามิเตอร์สำคัญ
- a: อาร์เรย์อินพุท 1 มิติตัวแรก (N,)
- v: อาร์เรย์อินพุท 1 มิติตัวที่สอง (M,) หาก v ยาวกว่า a จะสลับกันก่อนคำนวณ
- mode: โหมดการคอนโวลูชัน ('full', 'valid', 'same') ค่าเริ่มต้น: 'full'
- full: คืนคอนโวลูชันที่ทุกจุดทับซ้อน รูปร่างเอาต์พุท (N+M-1,)
- valid: คืนเฉพาะจุดที่ทับซ้อนสมบูรณ์ รูปร่าง (max(M,N) - min(M,N) + 1,)
- same: คืนขนาดเท่ากับอาร์เรย์ที่ใหญ่กว่า
ขั้นตอนการทำงาน
1. นำเข้าไลบรารีที่จำเป็น
import numpy as np
2. สร้างอาร์เรย์ 1 มิติ สองอาร์เรย์
arr1 = np.array([1, 2, 3])
arr2 = np.array([0, 1, 0.5])
3. แสดงข้อมูลของอาร์เรย์
print("Array1...\n", arr1)
print("\nArray2...\n", arr2)
print("\nDimensions of Array1...\n", arr1.ndim)
print("\nDimensions of Array2...\n", arr2.ndim)
print("\nShape of Array1...\n", arr1.shape)
print("\nShape of Array2...\n", arr2.shape)
4. คำนวณคอนโวลูชัน โหมด full
print("\nResult....\n", np.convolve(arr1, arr2, mode='full'))
ตัวอย่างโค้ดสมบูรณ์
import numpy as np
# สร้างอาร์เรย์ 1 มิติ สองอาร์เรย์
arr1 = np.array([1, 2, 3])
arr2 = np.array([0, 1, 0.5])
# แสดงข้อมูลอาร์เรย์
print("Array1...\n", arr1)
print("\nArray2...\n", arr2)
print("\nDimensions of Array1...\n", arr1.ndim)
print("\nDimensions of Array2...\n", arr2.ndim)
print("\nShape of Array1...\n", arr1.shape)
print("\nShape of Array2...\n", arr2.shape)
# คำนวณคอนโวลูชัน โหมด full
print("\nResult....\n", np.convolve(arr1, arr2, mode='full'))
ผลลัพธ์
Array1...
[1 2 3]
Array2...
[0. 1. 0.5]
Dimensions of Array1...
1
Dimensions of Array2...
1
Shape of Array1...
(3,)
Shape of Array2...
(3,)
Result....
[0. 1. 2.5 4. 1.5]
สรุป
คอนโวลูชันของ [1, 2, 3] และ [0, 1, 0.5] ด้วยโหมด 'full' ให้ผลลัพธ์ [0, 1, 2.5, 4, 1.5] ความยาว 5 = 3+3-1 โหมด 'full' แสดงผลที่ทุกจุดทับซ้อน รวมถึงปลายที่ทับซ้อนไม่สมบูรณ์