2016-11-10 103 views
1

下面的簡單的代碼返回:類型錯誤:壞操作數類型爲ABS(): '列表'類型錯誤:壞操作數類型爲ABS(): '列表'

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() 

我取代p和r與:

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] 

...,但沒有區別。

我做錯了什麼? 有什麼解決方法嗎?

我提到bad operand type for abs(): 'list',但我不能應用該解決方案,因爲__builtin __。abs()函數用於scipy.signal.residue(不在我的代碼中)。

+0

你爲什麼要首先通過列表? –

回答

2

看看文檔docs,看起來你錯誤地輸入了輸出。 residue需要一個b並返回- [Rpķ

第三個參數(tol)應該是一個數字,但是您要傳遞一個列表。


您可能會使用錯誤的方法。看看scipy.signal.invres,這應該是你正在尋找的。

+0

啊,我明白了!我很尷尬...是的,scipy.signal.invres是我一直在尋找的。非常感謝你告訴我。 – IanHacker

+1

再次感謝並讓我找藉口。我犯了這樣一個錯誤,因爲MATLAB中的residual()可以用兩種方式來處理,'[r,p,k] = residue(b,a)'以及'[b,a] = residue(r,p,k) '。所以,我混淆了它們。 – IanHacker

相關問題