Ich habe einen Python-Code, den ich in Matlab-Code konvertieren will. Der Code dient zur Grundlinienkorrektur für eine Welle.Alternative von spsolve und spdiag in Matlab/Oktave
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
Ich habe es versucht, wie dies konvertieren.
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
Allerdings gibt es keine Funktionen genannt spsolve
und spdiag
in Octave/Matlab. Gibt es eine alternative Funktion, die ich verwenden kann?
side note : Es gibt keine 'spdiag'-Funktionen in MATLAB/OCTAVE oder in Python. Seine 'spidiags', und ja, die MATLAB-Funktion hat genau die gleiche Syntax wie die Python-Funktion. –
Beachten Sie auch, dass 'D = sparse.csc_matrix (diff (Auge (L), 2))' Dies ist nicht MATLAB-Syntax, und Sie möchten möglicherweise alle Zeilen mit einem Semikolon beenden, um die Befehlszeile auszugeben. Außerdem können Sie keine Standardwerte für die Eingaben definieren. Ihre Funktion benötigt ** viel Arbeit ** MATLAB –
Was kann die Alternative von 'sparse.csc_matrix()' sein? –