我试图用python重建一首歌,但是我不能连接同一首歌的音符。 我得到这个错误:
ValueError: operands could not be broadcast together with shapes (0) (1250)
我的代码是:
import numpy as np, matplotlib.pyplot as plt
def nota(f,d):
ts = 0.0002
t = np.arange(0, d, ts)
X = 5500*np.cos(2*np.pi*f*t)
return X
# II.2.b)
pausa = nota(0,0)
La = nota(440,0.25)
Mi = nota(659.26,0.25)
Do = nota(253.25,0.25)
Sol = nota(783.99,0.25)
Si = nota(493.88,0.25)
Solbemol = nota(830.61,0.25)
def FurElise():
musica = np.array((pausa,pausa,La,Mi,La,pausa,pausa,Mi,Mi,Solbemol, \
pausa,pausa,La,Mi,La,pausa,pausa,pausa,La,Mi,La, \
pausa,pausa,Mi,Mi,Solbemol,pausa,pausa,La,Mi,La, \
pausa,Do,Sol,Do,pausa,pausa,Sol,Sol,Si,pausa,pausa, \
La,Mi,La,pausa,pausa,Mi,Mi,Mi,pausa))
y=0
for x in musica:
z=np.hstack((x,y))
y = y+x
z=np.hstack((x,y))
plt.plot(z)
plt.show()
FurElise()
正如@filmor所说,}是不同的形状,原因是你对
x
和{pausa = nota(0,0)
的定义。通过使用d
值0
,得到的数组的长度是0
,而其他所有数组的长度都是1250
,y = y+x
最终将抛出您看到的错误(例如,在3次迭代之后,给定当前的musica
定义)。在假设您希望暂停的长度与所有其他注释的长度相同,则可以重新定义
pausa
以消除错误:创建}
musica
(假设您已经修复了@fgb描述的pausa
),方法是将51个注释堆叠为二维数组中的行。所以,musica.shape
是{我认为您希望
z
是一个长的1D数组,其中所有的注释都在一行中,而不是每个注释都在各自的行中。有两种解决方案。一是说:彻底清除所有这些:
^{pr2}$更好的解决方案是在创建
musica
时使其成为1D数组:这将获取所有的注释(
pausa
,La
,等等)并将它们按orizontally(这样它们都放在一行中),因此您永远不需要展开或连接任何内容。在相关问题 更多 >
编程相关推荐