หากต้องการคืนค่าการตะกรั้นเชิงเส้นแบบไม่ต่อเนื่อง (discrete linear convolution) ของลำดับ 1 มิติสองลำดับ ให้ใช้เมธอด numpy.convolve() ใน Python NumPy
ตัวดำเนินการตะกรั้นมักพบในการประมวลผลสัญญาณ เพื่อจำลองผลของระบบเชิงเส้นไม่เปลี่ยนแปลงตามเวลาต่อสัญญาณ ในทฤษฎีความน่าจะเป็น ผลรวมของตัวแปรสุ่มอิสระสองตัวจะกระจายตามการตะกรั้นของการกระจายของแต่ละตัว หาก v ยาวกว่า a อาร์เรย์จะถูกสลับก่อนการคำนวณ
พารามิเตอร์สำคัญ
- a: อาร์เรย์อินพุท 1 มิติ ตัวแรก
- v: อาร์เรย์อินพุท 1 มิติ ตัวที่สอง
- mode: โหมดการคำนวณ (optional) -
'full'(default),'valid','same'
ขั้นตอนการใช้งาน
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 เริ่มต้น = 'full')
print("\nResult....\n", np.convolve(arr1, arr2))
ตัวอย่างโค้ดเต็ม
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='full' เริ่มต้น)
print("\nResult....\n", np.convolve(arr1, arr2))
ผลลัพธ์ที่ได้
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]
คำอธิบายเพิ่มเติม
โหมด 'full' (ค่าเริ่มต้น) คืนค่าการตะกรั้น เต็มรูปแบบ (full convolution) ความยาว = M + N - 1
สำหรับ arr1=[1,2,3] และ arr2=[0,1,0.5] (ความยาว 3 ทั้งคู่):
- ความยาวผลลัพธ์ = 3 + 3 - 1 = 5
- ผลลัพธ์:
[0.0, 1.0, 2.5, 4.0, 1.5]
การคำนวณแต่ละตำแหน่ง (index k):
- k=0: 1×0 = 0
- k=1: 1×1 + 2×0 = 1
- k=2: 1×0.5 + 2×1 + 3×0 = 2.5
- k=3: 2×0.5 + 3×1 = 4.0
- k=4: 3×0.5 = 1.5
สรุปโหมดทั้งสาม:
| Mode | ความยาว | ผลลัพธ์ | คำอธิบาย |
|---|---|---|---|
full | M+N-1=5 | [0, 1, 2.5, 4, 1.5] | เต็มรูปแบบ รวม zero-padding |
same | max(M,N)=3 | [1, 2.5, 4] | ขนาดเท่าอินพุทที่ใหญ่กว่า |
valid | max-min+1=1 | [2.5] | เฉพาะ full overlap |
ใช้ numpy.convolve() คำนวณ discrete linear convolution แบบ full (default) คืนค่า 5 จุด [0, 1, 2.5, 4, 1.5] จากสองอาร์เรย์ 1D