1

我正在尝试将此 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 的数组

4

1 回答 1

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
于 2013-04-16T08:41:35.530 回答