разреженная матрица svd в python

Кто-нибудь знает, как выполнить операцию svd на разреженной матрице в python? Кажется, что в scipy.sparse.linalg такой функциональности нет.


person tuesday    schedule 13.07.2010    source источник
comment
Кажется, вам не повезло, и вам нужно обернуть библиотеку Fortran, такую ​​как PROPACK, самостоятельно. Или попросите разработчиков Scipy добавить SVD на основе PROPACK в следующую версию.   -  person Philipp    schedule 13.07.2010
comment
Существует также библиотека SVDPACK с версиями/интерфейсами C и C++.   -  person Philipp    schedule 13.07.2010


Ответы (4)


Для этого можно использовать библиотеку Divisi; с главной страницы:

  • Это библиотека, написанная на Python с использованием библиотеки C (SVDLIBC) для выполнения разреженной операции SVD с использованием алгоритма Ланцоша. Другие математические вычисления выполняются NumPy.
person ars    schedule 13.07.2010

Похоже, sparsesvd — это то, что вам нужно! SVDLIBC эффективно обернут в Python (без лишних копий данных в ОЗУ).

Просто запустите "easy_install sparsesvd" для установки.

person Radim    schedule 22.10.2010

Вы можете попробовать scipy.sparse.linalg. svd, хотя документация все еще находится в стадии разработки и поэтому довольно лаконична.

person Vedrana Janković    schedule 30.09.2010
comment
Вы, вероятно, имеете в виду процедуру под названием svds. Я пробовал, но сам не был доволен результатом... - person dividebyzero; 14.12.2011

Простой пример с использованием библиотеки python-recsys:

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
person ocelma    schedule 10.04.2012