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

คืนค่าการตะกรั้นเชิงเส้นแบบ離散ของลำดับ 1 มิติสองลำดับและหาส่วนทับซ้อนใน Python

หากต้องการคืนค่าการตะกรั้นเชิงเส้นแบบไม่ต่อเนื่อง (discrete linear convolution) ของลำดับ 1 มิติสองลำดับ ให้ใช้เมธอด numpy.convolve() ใน Python NumPy

ตัวดำเนินการตะกรั้น (convolution operator) มักพบในการประมวลผลสัญญาณ (signal processing) เพื่อจำลองผลของระบบเชิงเส้นไม่เปลี่ยนแปลงตามเวลา (linear time-invariant system) ต่อสัญญาณ ในทฤษฎีความน่าจะเป็น ผลรวมของตัวแปรสุ่มอิสระสองตัวจะกระจายตามการตะกรั้นของการกระจายของแต่ละตัว

หาก v ยาวกว่า a อาร์เรย์จะถูกสลับก่อนการคำนวณ เมธอดคืนค่าการตะกรั้นเชิงเส้นแบบไม่ต่อเนื่องของ a และ v

พารามิเตอร์สำคัญ

  • a: อาร์เรย์อินพุท 1 มิติ ตัวแรก
  • v: อาร์เรย์อินพุท 1 มิติ ตัวที่สอง
  • mode: โหมดการคำนวณ (optional) ค่าที่เป็นไปได้: 'full', 'valid', 'same'

โหมด 'valid'

คืนค่าออกมาความยาว max(M, N) - min(M, N) + 1 ผลคูณการตะกรั้นจะให้เฉพาะจุดที่สัญญาณทับซ้อนกันอย่างสมบูรณ์ ค่าภายนอกขอบเขตสัญญาณไม่มีผล

ขั้นตอนการใช้งาน

1. นำเข้าไลบรารีที่จำเป็น

import numpy as np

2. สร้างอาร์เรย์ NumPy 1 มิติสองอาร์เรย์

arr1 = np.array([1, 2, 3])
arr2 = np.array([0, 1, 0.5])

3. แสดงอาร์เรย์

print("Array1...\n", arr1)
print("\nArray2...\n", arr2)

4. ตรวจสอบมิติของทั้งสองอาร์เรย์

print("\nDimensions of Array1...\n", arr1.ndim)
print("\nDimensions of Array2...\n", arr2.ndim)

5. ตรวจสอบรูปร่างของทั้งสองอาร์เรย์

print("\nShape of Array1...\n", arr1.shape)
print("\nShape of Array2...\n", arr2.shape)

6. คำนวณการตะกรั้นแบบ discrete linear ด้วย mode='valid'

print("\nResult....\n", np.convolve(arr1, arr2, mode='valid'))

ตัวอย่างโค้ดเต็ม

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)

# คำนวณการตะกรั้น mode='valid'
print("\nResult....\n", np.convolve(arr1, arr2, mode='valid'))

ผลลัพธ์ที่ได้

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....
 [2.5]

คำอธิบายเพิ่มเติม

การคำนวณแบบ mode='valid' ให้ผลลัพธ์เฉพาะส่วนที่สัญญาณทั้งสองทับซ้อนกัน อย่างสมบูรณ์ (fully overlap)

สำหรับ arr1=[1,2,3] และ arr2=[0,1,0.5] (ความยาวทั้งคู่คือ 3):

  • ความยาวผลลัพธ์ = max(3,3) - min(3,3) + 1 = 1
  • การคำนวณ: เฉพาะตำแหน่งที่ arr2 ทับซ้อน arr1 อย่างเต็มที่
  • คำนวณ: 1*0.5 + 2*1 + 3*0 = 0.5 + 2 + 0 = 2.5

โหมดอื่นๆ:

  • 'full' (default): คืนค่าการตะกรั้นเต็มรูปแบบ ความยาว M+N-1 = 5
  • 'same': คืนค่าความยาว max(M,N) = 3 รักษาขนาดอาร์เรย์เดิม

การใช้งานทั่วไป: การกรองสัญญาณ (filtering), การประมวลผลภาพ, การวิเคราะห์อนุกรมเวลา

คืนค่าการตะกรั้นเชิงเส้นแบบ離散ของลำดับ 1 มิติสองลำดับและหาส่วนทับซ้อนใน Python

ใช้ numpy.convolve(mode='valid') คำนวณ discrete linear convolution หาส่วนทับซ้อนเต็มที่ของสองสัญญาณ 1D คืนค่าเดียว [2.5]