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

คืนค่าการตะกรั้นเชิงเส้นแบบ離散และค่ากลางใน Python

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

ตัวดำเนินการตะกรั้นมักพบในการประมวลผลสัญญาณ เพื่อจำลองผลของระบบเชิงเส้นไม่เปลี่ยนแปลงตามเวลาต่อสัญญาณ ในทฤษฎีความน่าจะเป็น ผลรวมของตัวแปรสุ่มอิสระสองตัวจะกระจายตามการตะกรั้นของการกระจายของแต่ละตัว หาก v ยาวกว่า a อาร์เรย์จะถูกสลับก่อนการคำนวณ

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

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

โหมด 'same'

คืนค่าออกมาความยาว max(M, N) ผลกระทบจากขอบเขต (boundary effects) ยังคงมองเห็นได้

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

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='same'

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

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

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='same'
print("\nResult....\n", np.convolve(arr1, arr2, mode='same'))

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

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

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

การคำนวณแบบ mode='same' ให้ผลลัพธ์ที่มี ความยาวเท่ากับอาร์เรย์ที่ยาวกว่า (max(M, N))

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

  • ความยาวผลลัพธ์ = max(3,3) = 3
  • ผลลัพธ์: [1.0, 2.5, 4.0]

การคำนวณแต่ละตำแหน่ง (zero-padding ถูกนำมาใช้เพื่อขยายขอบเขต):

  • ตำแหน่ง 0: 1*0 + 2*0 + 3*1 = 3 → แต่จริงๆ numpy ใช้ zero-padding ทำให้ได้ 1.0
  • ตำแหน่ง 1: 1*0.5 + 2*1 + 3*0 = 2.5 (ตรงกลาง - full overlap)
  • ตำแหน่ง 2: 1*0 + 2*0.5 + 3*1 = 4.0

เปรียบเทียบโหมดทั้งสาม:

  • 'valid': [2.5] (ความยาว 1 - เฉพาะ full overlap)
  • 'same': [1.0, 2.5, 4.0] (ความยาว 3 - ขนาดเดิม)
  • 'full': [0.0, 1.0, 2.5, 4.0, 1.5] (ความยาว 5 - เต็มรูปแบบ)
คืนค่าการตะกรั้นเชิงเส้นแบบ離散และค่ากลางใน Python

ใช้ numpy.convolve(mode='same') คำนวณ discrete linear convolution คืนค่าขนาดเท่าอินพุท [1.0, 2.5, 4.0] รวม boundary effects