2016-01-22 134 views
2

当计算数组每个值的绝对值时,我得到一个与abs():'list'的坏操作数类型相关的错误。源代码中出现故障的部分是下一个:abs()的坏操作数类型:'list'

x = amplitudex * sin((2 * pi * (frequency * 1) * t) + phase); 
y = amplitudey * sin((2 * pi * (frequency * 2) * t) + phase); 
z = amplitudez * sin((2 * pi * (frequency * 3) * t) + phase); 

w= 0.55* (x + y + z); 
.... 
n = len(w); 
wf = [float(0)] * n; 
for k in range(n): # For each output element 
    s = float(0); 
    for t in range(n): # For each input element 
     s += w[t] * cmath.exp(-2j * cmath.pi * t * k/n); 
    wf[k] = float(s); 

sf = np.linspace(0.0, 1.0/(2.0*numCycles), numSamples/2); 

#The calculation of absolute values causes error: 
plot(sf, 2.0/numSamples * abs(wf[0:100])); 

如何在abs函数中修复此错误?我得到这个错误:(迷茫

感谢

+0

因为'abs'不能为了适用于ABS每个元素的数组 –

+0

使用'map';'。 –

+1

中您可以结束只是一个新行语句,没有'被浇铸为列表 – TigerhawkT3

回答

2

据我了解,你想abs与其他一些计算以及应用于列表切片中的每个成员,因为你使用切片表示法。这很容易与list comprehension

plot(sf, [2.0/numSamples * abs(element) for element in wf[0:100]]); 
0

您,是因为abs不能用于list错误你可以用地图使用它。

map(abs, wf[0:100]) 

如果你正在使用Python 3添加list

list(map(abs, wf[0:100])) 

或者你可以使用list comprehension设置你的abs_list:

wf_abs = [abs(x) for x in wf[0:100]] 
4

我看到你已经输入了numpy,因为你在代码中使用np.linspace。你可能会混淆numpy的abs,它会很高兴在列表和数组上工作,__builtin__.abs,它只适用于标量。

更改此:

abs(wf[0:100]) 

要这样:

np.abs(wf[0:100])