Does anyone know how to perform svd operation on a sparse matrix in python? It seems that there is no such functionality provided in scipy.sparse.linalg.
Asked
Active
Viewed 9,385 times
6
-
Seems you're out of luck and have to wrap a Fortran library such as PROPACK yourself. Or ask the Scipy developers to add PROPACK-based SVD in an upcoming version. – Philipp Jul 13 '10 at 07:16
-
There is also the SVDPACK library which has C and C++ versions/interfaces. – Philipp Jul 13 '10 at 07:24
4 Answers
3
A simple example using python-recsys library:
from recsys.algorithm.factorize import SVD
svd = SVD()
svd.load_data(dataset)
svd.compute(k=100, mean_center=True)
ITEMID1 = 1 # Toy Story
svd.similar(ITEMID1)
# Returns:
# [(1, 1.0), # Toy Story
# (3114, 0.87060391051018071), # Toy Story 2
# (2355, 0.67706936677315799), # A bug's life
# (588, 0.5807351496754426), # Aladdin
# (595, 0.46031829709743477), # Beauty and the Beast
# (1907, 0.44589398718134365), # Mulan
# (364, 0.42908159895574161), # The Lion King
# (2081, 0.42566581277820803), # The Little Mermaid
# (3396, 0.42474056361935913), # The Muppet Movie
# (2761, 0.40439361857585354)] # The Iron Giant
ITEMID2 = 2355 # A bug's life
svd.similarity(ITEMID1, ITEMID2)
# 0.67706936677315799

Pedro Romano
- 10,973
- 4
- 46
- 50

ocelma
- 119
- 1
- 2
3
You can try scipy.sparse.linalg.svd, although the documentation is still a work-in-progress and thus rather laconic.

Vedrana Janković
- 35
- 4
-
1You probably mean the procedure called "svds". I tried it, but wasn't happy with the results myself... – dividebyzero Dec 14 '11 at 17:40