2010-07-13 116 views
6

有誰知道如何在python中對稀疏矩陣執行svd操作?似乎scipy.sparse.linalg中沒有提供這樣的功能。python中的稀疏矩陣svd

+0

看來你的運氣了,不得不換一個Fortran庫如PROPACK自己。或者要求Scipy開發人員在即將推出的版本中添加基於PROPACK的SVD。 – Philipp 2010-07-13 07:16:14

+0

還有SVDPACK庫,它有C和C++版本/接口。 – Philipp 2010-07-13 07:24:26

回答

3

您可以使用Divisi庫來實現此目的;從主頁開始:

  • 這是一個用Python編寫的庫,使用C庫(SVDLIBC)使用Lanczos算法執行稀疏SVD操作。其他數學計算由NumPy執行。
3

您可以嘗試scipy.sparse.linalg.svd,雖然文檔仍然是一個工作進程,因此相當簡潔。

+1

您可能是指稱爲「svds」的過程。我嘗試過,但自己對結果不滿意...... – dividebyzero 2011-12-14 17:40:05

4

聽起來像sparsesvd是你在找什麼! SVDLIBC高效地包裝在Python中(沒有額外的數據副本在RAM中製作)。

只需運行「easy_install sparsesvd」即可進行安裝。

2

使用庫一個簡單的例子:

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