Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tích chập tuyến tính rời rạc của hai dãy 1D và lấy vùng chồng lấp trong Python

Để tính tích chập (convolution) tuyến tính rời rạc của hai dãy một chiều, chúng ta sử dụng numpy.convolve(). Toán tử tích chập thường xuất hiện trong xử lý tín hiệu, mô hình hóa tác động của hệ thống tuyến tính bất biến theo thời gian lên tín hiệu. Trong lý thuyết xác suất, tổng của hai biến ngẫu nhiên độc lập phân phối theo tích chập của phân phối riêng lẻ.

Tham số của numpy.convolve()

  • a: Mảng đầu vào một chiều thứ nhất.
  • v: Mảng đầu vào một chiều thứ hai. Nếu v dài hơn a, hai mảng sẽ được hoán đổi trước khi tính.
  • mode: Chế độ tính toán (tùy chọn):
    • 'full' (mặc định): Trả về tích chập đầy đủ, độ dài = M+N-1.
    • 'valid': Chỉ trả về phần chồng lấp hoàn toàn, độ dài = max(M,N) - min(M,N) + 1.
    • 'same': Trả về phần trung tâm, độ dài = max(M,N).

Các bước thực hiện (mode='valid')

1. Nhập thư viện

import numpy as np

2. Tạo hai mảng 1D

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

3. Hiển thị mảng

print("Mảng 1...\n", arr1)
print("\nMảng 2...\n", arr2)

4. Kiểm tra số chiều

print("\nSố chiều Mảng 1...\n", arr1.ndim)
print("\nSố chiều Mảng 2...\n", arr2.ndim)

5. Kiểm tra hình dạng

print("\nHình dạng Mảng 1...\n", arr1.shape)
print("\nHình dạng Mảng 2...\n", arr2.shape)

6. Tích chập với mode='valid' (chỉ vùng chồng lấp hoàn toàn)

print("\nKết quả (mode='valid')...\n", np.convolve(arr1, arr2, mode='valid'))

Ví dụ hoàn chỉnh

import numpy as np

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

print("Mảng 1...\n", arr1)
print("\nMảng 2...\n", arr2)
print("\nSố chiều Mảng 1...\n", arr1.ndim)
print("\nSố chiều Mảng 2...\n", arr2.ndim)
print("\nHình dạng Mảng 1...\n", arr1.shape)
print("\nHình dạng Mảng 2...\n", arr2.shape)
print("\nKết quả (mode='valid')...\n", np.convolve(arr1, arr2, mode='valid'))

Kết quả đầu ra

Mảng 1...
 [1 2 3]
Mảng 2...
 [0.  1.  0.5]
Số chiều Mảng 1...
 1
Số chiều Mảng 2...
 1
Hình dạng Mảng 1...
 (3,)
Hình dạng Mảng 2...
 (3,)
Kết quả (mode='valid')...
 [2.5]

Giải thích mode='valid': Chỉ tính tại vị trí mà hai tín hiệu chồng lấp hoàn toàn. Với hai mảng độ dài 3, chỉ có 1 vị trí chồng lấp hoàn toàn (vị trí giữa), kết quả: 1*0.5 + 2*1 + 3*0 = 2.5.