我正在尝试计算和绘制某些信号的傅立叶系数,但出现以下错误:


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/

10-12 00:36
查看更多