0
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:设置一个带有序列的数组元素。”。我怎样才能避免这个错误?

4

2 回答 2

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' 需要被定义为一个数组,并且需要得到 'proper' 索引。您不能立即在其上分配索引。请参阅以下示例:

>>> 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']
于 2013-09-02T16:12:02.250 回答
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]等。

于 2013-09-03T03:28:33.593 回答