Để 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
vdài hơna, 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.