2013-04-16 79 views
2

我想这个MATLAB代码转换为蟒:翻译MATLAB代码到Python(SciPy的)

T = length(z); 
lambda = 10; 
I = speye(T) 
D2 = spdiags(ones(T-2,1)*[1 -2 1],[0:2],T-2,T); 
z_stat = (I-inv(I + lambda^2*D2'*D2))*z; 

我在此刻得到了什么:

T = len(signal) 
lam = 10; 
I = np.identity(T) 
D2 = scipy.sparse.spdiags(np.ones((T-2,1),dtype=np.int)*[1,-2,1],(range(0,3)),T-2,T); 

目前,我得到这个错误

"scipy.sparse.sp...ge(0,3)),T-2,T)" ValueError: number of diagonals (298) does not match the number of offsets (3) args tuple: ('number of diagonals (298) does not match the number of offsets (3)',)

查看文档时,matlab函数和python函数非常相似。虽然可能有一个我失踪的差异。我现在的问题是:我做错了什么?

编辑:z是长度为数组300

+0

蟒蛇的哪个版本? –

+0

我有Python 2.7 – Ojtwist

回答

0

如果调换过滤数据spdiags那么你得到的两个包的尺寸相同的答案:

# numpy/scipy 
filt = [1,-2,1]* np.ones((1,T-2),dtype=np.int).T 
D2 = scipy.sparse.spdiags(data.T, (range(0,3)),T-2,T) 
np.shape(D2) 
>>> (298, 300) 

% matlab check 
D2 = spdiags(ones(T-2,1)*[1 -2 1],[0:2],T-2,T) 
size(D2) 
ans = 
    298 300 
+0

是的,但内容看起来不同。 – Ojtwist

+0

nvm我错了 – Ojtwist