Python中的Numpy convolve()方法

4,740 阅读4分钟

卷积是什么意思? 在数学上,卷积是一个数学运算符,一般用于信号处理。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()方法就结束了。

另请参见

Numpy correlate()

Numpy Polyfit()

Numpy Linalg det()

Numpy ceil()

Numpy floor()