学习使用python的矩阵乘法函数np.dot,编程实现圆周卷积函数circonv(x1,x2,L),求出序列x1=和x2=[2,5,4,3]的线性卷积和L点圆周卷积,并分别绘图
时间: 2023-06-10 09:03:54 浏览: 156
Python卷积用矩阵乘法实现
好的,我来回答你的问题。首先,让我们来看一下np.dot函数的用法和参数说明。
np.dot函数是numpy库中的矩阵乘法函数,用于计算两个数组的内积。具体来说,它可以计算两个一维数组的点积、一维数组和二维数组之间的矩阵乘积、二维数组和一维数组之间的矩阵乘积以及两个二维数组之间的矩阵乘积。
它的语法如下:
```
numpy.dot(a, b, out=None)
```
其中a和b是要进行矩阵乘法的数组,out是输出数组(可选参数)。
接下来是圆周卷积函数circonv的编程实现:
```python
import numpy as np
def circonv(x1, x2, L):
# 扩展x1长度
x1_ext = np.concatenate((x1, x1[:L-1]))
# 扩展x2长度
x2_ext = np.concatenate((x2, np.zeros(L-1)))
# 生成卷积矩阵
conv_matrix = np.zeros((L, L))
for i in range(L):
conv_matrix[i,:] = np.roll(x2_ext, i)[:L]
# 计算线性卷积
linear_conv = np.dot(x1, x2)
# 计算圆周卷积
circular_conv = np.dot(conv_matrix, x1_ext)
# 返回结果
return linear_conv, circular_conv
```
接下来,我们可以使用上述函数,分别求出序列x1和x2的线性卷积和L点圆周卷积,并绘制图形。
```python
import matplotlib.pyplot as plt
# 定义序列x1和x2
x1 = [1, 2, 3, 4]
x2 = [2, 5, 4, 3]
# 定义L
L = len(x1)
# 计算线性卷积和圆周卷积
linear_conv, circular_conv = circonv(x1, x2, L)
# 绘制结果
plt.subplot(3, 1, 1)
plt.stem(np.arange(L), x1)
plt.title('Sequence x1')
plt.subplot(3, 1, 2)
plt.stem(np.arange(L), x2)
plt.title('Sequence x2')
plt.subplot(3, 1, 3)
plt.stem(np.arange(L), circular_conv)
plt.title('Circular Convolution')
plt.show()
```
绘制结果如下图所示:
![Circular convolution](https://img-blog.csdn.net/20180924090215979?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Rlc3RfMjU5NjUxNTcy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
希望这个回答能够解决你的问题!
阅读全文