Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

คืนคอนโวลูชันเชิงเส้นแบบดิสครีตของลำดับ 1 มิติ สองลำดับพร้อมโหมดใน Python

บทนำ

ในการคืนคอนโวลูชันเชิงเส้นแบบดิสครีต (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' แสดงผลที่ทุกจุดทับซ้อน รวมถึงปลายที่ทับซ้อนไม่สมบูรณ์