2016-11-10 2 views
1

Die folgende einfache Code gibt: Typeerror: bad Operandtyp für abs(): 'list'Typeerror: bad Operandtyp für abs(): 'list'

from scipy.signal import residue 

def x_filter(): 
    p = [complex(-2505.707527665261,3165.104073896715),complex(-2505.707527665261,-3165.104073896715),complex(-3449.516723926777,1032.914743287806),complex(-3449.516723926777,-1032.914743287806)] 
    r = [complex(-1981.17378001573,2672.79673635191),complex(-1981.17378001573,-2672.79673635191),complex(1981.17378001573,-10000.37025226017),complex(1981.17378001573,10000.37025226017)] 
    k = [] 

    [b,a]=residue(r,p,k) 

filtered = x_filter() 

I p und r mit Fassung:

p = [-2505.707527665261+3165.104073896715j,-2505.707527665261-3165.104073896715j,-3449.516723926777+1032.914743287806j,-3449.516723926777-1032.914743287806j] 
r = [-1981.17378001573+2672.79673635191j,-1981.17378001573-2672.79673635191j,1981.17378001573-10000.37025226017j,1981.17378001573+10000.37025226017j] 

..., aber macht keinen Unterschied.

Mache ich etwas falsch? Gibt es eine Problemumgehung?

Ich bezog mich auf bad operand type for abs(): 'list', aber ich kann diese Lösung nicht anwenden, weil die Funktion __builtin __. Abs() in scipy.signal.residue (nicht in meinem Code) verwendet wird.

+0

Warum versuchen Sie, Listen an erster Stelle zu übergeben? –

Antwort

2

Mit Blick auf die Dokumentation docs scheint es, dass Sie Eingänge für Ausgänge verwechselten. residue nimmt a und b und gibt r, p und k.

Der dritte Parameter (tol) sollte eine Zahl sein, aber Sie übergeben eine Liste.


Sie könnten eine falsche Methode verwenden. Werfen Sie einen Blick auf scipy.signal.invres, das sollte was Sie suchen.

+0

Ah, ich verstehe! Ich bin so peinlich ... Ja, scipy.signal.invres ist, was ich gesucht habe. Vielen Dank, dass du es mir erzählt hast. – IanHacker

+1

Nochmals vielen Dank und lassen Sie mich eine Entschuldigung machen. Ich habe einen solchen Fehler gemacht, weil residue() in MATLAB beide Möglichkeiten haben kann: '[r, p, k] = Rest (b, a)' sowie '[b, a] = Rest (r, p, k) '. Also habe ich sie verwechselt. – IanHacker

Verwandte Themen