【Python】固有値分解・特異値分解のソート並び替え【簡単】

こんにちはたくまろです。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()によって並び替えを与えています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です