我试图将matlab代码翻译成python:
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:对角数(298)不匹配偏移数(3) args元组:(‘对角线数(298)不匹配偏移数(3),
当查看文档时,matlab函数和python函数非常相似。虽然我可能错过了一个不同的地方。我现在的问题是:我做错了什么?
编辑:Z是一个长度为300的数组
发布于 2013-04-16 08:41:35
如果将筛选器数据转到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 300https://stackoverflow.com/questions/16030620
复制相似问题