Singularitätszerlegung (SVD), Low Rank Approximation (LRA) in Python

Wenn Sie beschleunigen möchten, werden Sie es wahrscheinlich nicht von Lapack oder Python aus verwenden. Wenn Sie also solche wissenschaftlichen und technologischen Berechnungen als Antwort für diejenigen verwenden können, die dies in Cuda, C oder C ++ tun

Ich dachte, es wäre ein Memo

Quellcode

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]]

Referenz

Recommended Posts

Singularitätszerlegung (SVD), Low Rank Approximation (LRA) in Python
Niedrigrangige Approximation von Bildern durch Singularitätszerlegung
LU-Zerlegung in Python
Berechnung des Scherspielwerts in Python
Niedrigrangige Approximation des Bildes durch Tucker-Zerlegung
[Python] Bool-Wertinversion in einer Zeile
Konvertierung von String → Bool-Wert in Python Consideration
DL, Bytewert und Löschen der Datei in Python3
Versuchen Sie, die Daimyo-Matrix durch einen Singularwert zu zerlegen
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus