Décomposition de singularité (SVD), approximation de bas rang (LRA) en Python

Si vous voulez accélérer, je ne pense pas que vous l'utiliserez depuis Lapack ou Python, donc si vous pouvez utiliser ces calculs scientifiques et technologiques comme réponse pour ceux qui le font en cuda, C ou C ++

Je pensais que c'était un mémo

Code source

low_rank_approximation.py


import numpy as np
from scipy import linalg

def low_rank_approximation(a,rank):
    u, s, v = linalg.svd(a)
    ur = u[:, :rank]
    sr = np.matrix(linalg.diagsvd(s[:rank], rank,rank))
    vr = v[:rank, :]
    return np.asarray(ur*sr*vr)

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print A
B = low_rank_approximation(A,1)
print B

# python low_rank_approximation.py
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]
# [[ 1.73621779  2.07174246  2.40726714]
#  [ 4.2071528   5.02018649  5.83322018]
#  [ 6.6780878   7.96863051  9.25917322]]

référence

Recommended Posts

Décomposition de singularité (SVD), approximation de bas rang (LRA) en Python
Approximation de bas rang des images par décomposition de singularité
Décomposition LU en Python
Calcul de la valeur de jeu de cisaillement en Python
Approximation de bas rang de l'image par décomposition de Tucker
[Python] Inversion de valeur booléenne en une ligne
Conversion de chaîne → valeur booléenne en Python Considération
DL, valeur d'octet et suppression de fichier en Python3
Essayez de décomposer la matrice daimyo par valeur singulière
Découvrez la fraction de la valeur saisie en python