abs()的坏操作数类型:' list'

时间:2016-01-22 22:07:48

标签: python numpy

当计算数组的每个值的绝对值时,我得到与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功能中修复此错误?我对这个错误感到困惑:(

由于

3 个答案:

答案 0 :(得分:5)

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

改变这个:

abs(wf[0:100])

对此:

np.abs(wf[0:100])

答案 1 :(得分:3)

我收集您希望abs应用于列表切片的每个成员以及其他一些计算,因为您使用切片表示法。使用list comprehension即可轻松完成。

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

答案 2 :(得分: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]]