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