卷积是什么意思? 在数学上,卷积是一个数学运算符,一般用于信号处理。numpy中的数组作为信号。
np.convolve
np.convolve()是numpy库的一个内置方法,用于返回两个一维向量的离散线性卷积。numpy convolve()方法接受三个参数,即v1、v2 和**模式,**并返回v1和v2一维向量的离散线性卷积。
给定的两个信号(numpy中的数组)的卷积可以定义为第一个信号(数组)的积分,反转,卷积到第二个信号(数组)上,并在两个向量重叠的地方相乘(用标量积)。
离散卷积操作可以用以下的函数来定义。
(v1 * v2) [n] = ∑ v1[m] v2[n-m]
语法
numpy.convolve (v1, v2, mode)
参数
Numpy convolve()函数最多需要三个参数:
v1 :数组_like,第一个一维输入数组。假设它的形状为(M,)
v2:array_like,第二个一维输入数组。假设它的形状是(N,)
模式: {'完整'、'相同'、'有效'},可选
它是一个可选的参数,有三种不同的模式,解释如下:
-
- '完整': 这是默认模式。它返回每个重叠点的卷积,输出形状为(M+N-1)。在卷积的端点,向量v1和v2并不完全重叠,可以看到边界效应。
-
- '相同': 在'相同'模式下,输出序列的长度是max(M, N)。边界效应仍然可见。
-
- '有效':在这种 "有效 "模式下,输出序列的长度是max(M,N)-min(M,N)+1。只有当v1和v2完全相互重叠时,才会给出卷积。处于信号边界之外的值不会受到影响。
返回值
convolve()方法返回v1和v2一维向量的离散线性卷积。
编程实例
显示numpy.convolve()方法工作原理的程序
# importing the numpy module
import numpy as np
# Making fist 1-D vector v1
v1 = np.array([3, 7])
print("First vector sequence is: ", v1)
# Making second 1-D vector v2
v2 = np.array([1, 2, 5, 7])
print("Second vector sequence is: ", v2)
print("\nprinting linear convolution result between v1 and v2 using default 'full' mode:")
print(np.convolve(v1, v2))
print("\nprinting linear convolution result between v1 and v2 using 'same' mode:")
print(np.convolve(v1, v2, mode='same'))
print("\nprinting linear convolution result between v1 and v2 using 'valid' mode:")
print(np.convolve(v1, v2, mode='valid'))
输出
First vector sequence is: [3 7]
Second vector sequence is: [1 2 5 7]
printing linear convolution result between v1 and v2 using default 'full' mode:
[ 3 13 29 56 49]
printing linear convolution result between v1 and v2 using 'same' mode:
[ 3 13 29 56]
printing linear convolution result between v1 and v2 using 'valid' mode:
[13 29 56]
解释
在程序convolve1.py中,我们取了两个一维的输入向量v1和v2。然后我们通过使用三种不同的模式来显示输出的线性卷积值。
在 "完全 "模式下进行的计算
由于v1=[3 7],v2=[1 2 5 7],并且操作是在完全模式下进行的,输出阵列的形状将由公式长度 ***(M+N-1)***给出 ,这里M=2,N=4。因此,结果矢量的形状将是2+4-1=5。
X从[3 7]反转到[7 3],然后我们进行乘法运算。
第一个元素。 7*未定义(推断为0)+3*1=3
第二个元素。7*1 + 3*2 = 13
第三元素。7*2 + 3*5 = 29
第四元素。7*5 + 3*7 = 56
第五元素是7*7+3 *未定义(推断为0)=49
因此,结果是:[3 13 29 56 49]
在 "相同 "模式下进行的计算。
由于v1=[3 7],v2=[1 2 5 7],并且操作是在相同模式下进行的,输出数组的形状将由公式 max(M, N)给出 ,这里M=2,N=4。因此,结果向量的形状将是4。
X从[3 7]反转到[7 3],然后我们进行乘法运算:
第一个元素: 7*未定义(推断为0)+3*1=3
第二个元素:7*1 + 3*2 = 13
第三元素:7*2 + 3*5 = 29
第四元素:7*5 + 3*7 = 56
第五元素是7*7+3 *未定义(推断为0)=49
因此,结果是:[3 13 29 56 49]
在 "有效 "模式下进行的计算
由于v1=[3 7],v2=[1 2 5 7],并且操作是在有效模式下进行的,输出数组的形状将由公式 max(M,N)-min(M,N)+1给出 , 这里M=2,N=4,因此结果向量的形状将是:4 - 2 + 1 = 3.
步骤1:X从[3 7]反转到[7 3],然后我们进行乘法运算。
第一个元素: 7*未定义(推断为0)+3*1=3
第二个元素:7*1 + 3*2 = 13
第三元素:7*2 + 3*5 = 29
第四元素:7*5 + 3*7 = 56
因此,结果是:[ 3 13 29 56]
最后,Python教程中的Numpy convolve()方法就结束了。