2010-07-13 12 views
6

क्या किसी को पता है कि पाइथन में एक स्पैर मैट्रिक्स पर svd ऑपरेशन कैसे करें? ऐसा लगता है कि scipy.sparse.linalg में प्रदान की गई ऐसी कोई कार्यक्षमता नहीं है।अजगर में स्पैर मैट्रिक्स svd

+0

लगता है आप भाग्य से बाहर रहे हैं और इस तरह के PROPACK खुद के रूप में एक फोरट्रान पुस्तकालय रैप करने के लिए किया है। या Scipy डेवलपर्स से आने वाले संस्करण में PROPACK- आधारित SVD जोड़ने के लिए कहें। – Philipp

+0

एसवीडीपीएक्स लाइब्रेरी भी है जिसमें सी और सी ++ संस्करण/इंटरफेस हैं। – Philipp

उत्तर

3

आप इसे पूरा करने के लिए Divisi लाइब्रेरी का उपयोग कर सकते हैं; मुख पृष्ठ से:

  • यह एक पुस्तकालय अजगर में लिखा, एक सी पुस्तकालय (SVDLIBC) का उपयोग कर Lanczos कलन विधि का उपयोग विरल SVD कार्रवाई करने के लिए है। अन्य गणितीय गणना न्यूमपी द्वारा की जाती है।
3

आप scipy.sparse.linalg.svd को आजमा सकते हैं, हालांकि दस्तावेज़ीकरण अभी भी एक कार्य प्रगतिशील है और इस प्रकार बल्कि लिकोनिक है।

+1

आप शायद "svds" नामक प्रक्रिया का मतलब है। मैंने कोशिश की, लेकिन परिणाम खुद से खुश नहीं था ... – dividebyzero

4

sparsesvd जैसा लगता है कि आप क्या देख रहे हैं! एसवीडीएलबीसी पाइथन में कुशलतापूर्वक लपेटा गया (रैम में कोई अतिरिक्त डेटा प्रतियां नहीं)।

बस स्थापित करने के लिए "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 
संबंधित मुद्दे