我正在尝试计算和绘制某些信号的傅立叶系数,但出现以下错误:
x and y must have same first dimension, but have shapes (1000,) and (1,)
使用以下代码:
x=np.linspace(0,6, 1000)
y=np.cos(x**2)
#Areglo de 0 a 2pi con la cantida p k=n
def fourier(y):
for k in range (0,3):
for t in range(0, n - 1):
X = np.sum(y*np.exp(-2j*np.pi*t*(k/n)))
return X
a=fourier(y)
plt.plot(x,a)
我该如何解决该错误?
最佳答案
错误
x and y must have same first dimension, but have shapes (1000,) and (1,)
当您尝试使用
plt.plot(x, a)
绘制结果时会出现。在您的特定情况下,x
是1000个值的数组,而a
是标量。您的意图可能是获取数组而不是标量,因此让我们深入研究您的fourier
实现。似乎您正在尝试计算Discrete Fourier Transform的前几个系数。为此,您需要将不同的系数分配给结果数组
X
中的不同索引。同样,总和应在整个向量表达式y*np.exp(-2j*np.pi*t*(k/n))
上进行。通过循环遍历t
的不同值,您将计算y
元素的总和,该元素的总和按某个因子进行缩放(每个t
值的因子不同,但是将相同的因子应用于整个数组y
用于t
的每个不同值)。综合所有这些,您应该获得以下实现:
def fourier(y, kmax):
n = len(y)
X = np.zeros(kmax, dtype=np.complex)
for k in range (0,kmax):
t = np.arange(0, n)
X[k] = np.sum(y*np.exp(-2j*np.pi*t*(k/n)))
return X
kmax = 3
a=fourier(y,kmax)
要绘制结果,必须沿x轴使用与y轴相同的点数。由于我们计算了
kmax
系数,因此我们还应该将x轴点的数量限制为kmax
。最后,由于这些系数是复数,因此您必须在绘制之前将结果减少为一组实数值。常见的应用是使用np.abs
获得系数的大小。plt.plot(x[0:kmax],np.abs(a))
plt.show()
关于python - 在尝试计算和绘制傅立叶系数时如何解决尺寸错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52414219/