こんにちはたくまろです。pythonで固有値分解や特異値分解をすると、固有値や特異値が大きい順に出力されないので、並び替えをしたいと思ったことはありませんか?そんなときにお使いください。まず、パッケージをインポートします。
import numpy as np
###Input###
# S matrix
###Output###
# P eigenvalue (singular value)
#Q eigenvector (singular vector)
#sorted eigenvalue decomposition
def eig_sort(S):
value, vec =np.linalg.eig(S)
idx = value.argsort()[::-1]
P = value[idx]
Q = vec.T[idx]
return (P, Q.T)
#sorted singular value decomposition
def svd_sort(S):
vec_r, value, vec_l = np.linalg.svd(S)
idx = value.argsort()[::-1]
P = value[idx]
Q_r = vec_r.T[idx]
Q_l = vec_l[idx]
return (Q_r.T, P, Q_l.T)
固有値分解でも特異値分解でも、構造は同じです。argsort()によって並び替えを与えています。