0
私はMatlabコードに変換しようとしているPythonコードを持っています。このコードは、波のベースライン補正用です。matlab/octaveのspsolveとspdiagの代替
def baseline_als(y, lam, p, niter=20):
L = len(y)
D = sparse.csc_matrix(np.diff(np.eye(L), 2))
w = np.ones(L)
for i in xrange(niter):
W = sparse.spdiags(w, 0, L, L)
Z = W + lam * D.dot(D.transpose())
z = spsolve(Z, w*y)
w = p * (y > z) + (1-p) * (y < z)
return z
私はこのように変換しようとしました。
function [z] = baseline_als(y, lam, p, niter=20)
L = len(y)
D = sparse.csc_matrix(diff(eye(L), 2))
w = ones(L)
for i = 1:niter
W = sparse.spdiags(w, 0, L, L) %Not working
Z = W + lam * dot(D,transpose(D))
z = spsolve(Z, w*y) % Not working
w = p * (y > z) + (1-p) * (y < z)
end % End of For loop
end % End of function
しかしオクターブ/ MathWorks社のMATLABでspsolve
とspdiag
という名前の関数はありません。私が使用できる代替機能はありますか?
サイドノート:MATLAB/OCTAVEやPythonでは 'spdiag'関数はありません。その 'spidiags'では、MATLAB関数はPythonと全く同じ構文をしています。 –
'D = sparse.csc_matrix(diff(eye(L)、2))'これはMATLABの構文ではなく、セミコロンでほぼすべての行を終了してコマンドライン出力を抑止したい場合もあることに注意してください。また、入力時にデフォルト値を定義することはできません。あなたの関数は、MATLABになるために**たくさんの作業を必要とします –
'sparse.csc_matrix()'の代わりになるものは何ですか? –