import math
import pylab
from matplotlib.pylab import *
import numpy as np
import scipy.fftpack
from scipy.io.wavfile import read
w = read('c:/users/ggg.wav')
a=np.array(w[1])
l=len(a)
#from __future__ import division
#b=(l/w[0])
b=(float(l)/w[0])
c=b*1000
d=int(c/40)
print d
print l/d
e=l/d
for i in range(0,d):
k[9]=np.array(a[(i*e)+1:((i+1)*e)])
print k
这是一个用于构建音频信号的python代码。但是,当我执行此代码时,我收到错误“ValueError:设置一个带序列的数组元素。”。我怎样才能避免这个错误?
答案 0 :(得分:1)
您的代码还有另一个问题我至少可以帮助您:
如果k未定义,则无法指定k [9]。例如:
>>> k[9] = 'test'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'k' is not defined
'k'需要定义为一个数组,需要获得'正确'的索引。您不能直接在其上分配索引。 请参阅以下示例:
>>> k[9]='test'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
和
>>> k = [None]*10
>>> k[9]='test'
>>> k
[None, None, None, None, None, None, None, None, None, 'test']
答案 1 :(得分:0)
这适用于样本.wav
w = read('ggg.wav')
a = w[1] # already an array
l=len(a)
b=(float(l)/w[0])
c=b*1000
d=int(c/40)
e=l/d
k = a[:e*d].reshape(d,e)
print k.shape
print k
print ''
k = [[] for i in range(d)] # initialize python list
for i in range(0,d):
k[i] = a[(i*e)+1:((i+1)*e)]
for i in k:
print i
# or
k = np.zeros((d,e-1),dtype='int') # initialize np.array
for i in range(d):
k[i,:] = a[(i*e)+1:((i+1)*e)]
print k
w[1]
已经是一个np.array。我想你希望将a
分成块e
多久。为此,我截断a
并重新整形,生成我的k
。您的索引错过a[0]
,a[e]
等