2011-06-06 18 views
8

स्पैर मैट्रिक्स प्रारूप (डॉक) मानता है कि कुंजीपटल में नहीं कुंजी के मान शून्य के बराबर हैं। क्या शून्य के अलावा डिफ़ॉल्ट मान का उपयोग करने का कोई तरीका है?scipy.sparse डिफ़ॉल्ट मान

इसके अलावा, वहाँ एक विरल मैट्रिक्स के लॉग (नियमित रूप से numpy मैट्रिक्स में np.log के लिए समान) की गणना करने के लिए एक रास्ता है

उत्तर

8

कि सुविधा में निर्मित नहीं है, लेकिन अगर आप वास्तव में इस की जरूरत है, तो आप होना चाहिए अपना खुद का dok_matrix कक्षा, या उप-वर्ग Scipy लिखने में सक्षम है। Scipy कार्यान्वयन यहां है: https://github.com/scipy/scipy/blob/master/scipy/sparse/dok.py कम से कम उन जगहों पर जहां dict.* कॉल किए जाते हैं, डिफ़ॉल्ट मान को बदलने की आवश्यकता होती है --- और शायद कुछ अन्य बदलाव किए जाने की आवश्यकता है।

हालांकि, मैं समस्या को सुधारने की कोशिश करता हूं ताकि इसकी आवश्यकता न हो। उदाहरण के लिए आप रेखीय बीजगणित करते हैं, तो आप लगातार अवधि अलग कर सकते हैं, और सबसे रेखीय बीजगणित दिनचर्या (जैसे पुनरावृत्ति समाधानकर्ताओं) के बजाय

from scipy.sparse.linalg import LinearOperator 
A = whatever_dok_matrix_minus_constant_term 
def my_matvec(x): 
    return A*x + constant_term * x.sum() 
op = LinearOperator(A.shape, matvec=my_matvec) 

करते हैं, आप op बजाय A में पारित कर सकते हैं।

मैट्रिक्स लघुगणक के रूप में: (scipy.linalg.logm के रूप में) एक विरल मैट्रिक्स के लघुगणक, आम तौर पर घना है, ताकि आप केवल एक घने एक पहले के मैट्रिक्स परिवर्तित करना चाहिए, और फिर हमेशा की तरह लघुगणक की गणना। जहां तक ​​मैं देखता हूं, एक स्पैर मैट्रिक्स का उपयोग करने से कोई प्रदर्शन लाभ नहीं होगा। यदि आपको केवल वेक्टर और लॉगरिदम के उत्पाद की गणना करने की आवश्यकता है, log(A) * v वेक्टर, हालांकि कुछ क्रिलोव विधि मदद कर सकती है।

आप OTOH लघुगणक elementwise गणना करने के लिए चाहते हैं, आप .data विशेषता सीधे

x = A.tocoo() 
x.data = np.log(x.data) 
A = x.todok() 

अकेले शून्य तत्व छोड़ देता है (कम से कम उपलब्ध सीओओ, सीएसआर, और सीएससी में) के रूप में ऊपर संशोधित कर सकते हैं, लेकिन , यह निरंतर भाग को अलग से इलाज करने की अनुमति देता है।

+1

धन्यवाद! यह दुर्भाग्यपूर्ण है कि इन सरल कार्यों को अभी तक लागू नहीं किया गया है :( – ElKamina

+0

मैं कहूंगा कि यह स्पैर मैट्रिस के लिए सरल कार्यक्षमता के बजाय एक विशेष होगा :) मुझे नहीं पता कि ऐसी चीजें अन्य स्पैस में लागू की गई हैं या नहीं मैट्रिक्स पैकेज, लेकिन AFAIK Matlab ऐसी चीजें नहीं लगती है। समस्या यह है कि यदि आप "लापता" मान nonzero था तो स्पैर मैट्रिस (उदाहरण के लिए कारक आदि) के साथ आप कई ऑपरेशन अच्छी तरह से काम नहीं करेंगे। –

+0

@ पीवी हां। मैं डिफ़ॉल्ट मान मुद्दे पर आपसे सहमत हूं। लेकिन मैट्रिक्स के लॉग की गणना करने जैसी अन्य चीजें लागू की जानी चाहिए। एक मामूली बात है। कुछ प्रकार के स्पैर मैट्रिस एक्स + 1 कामों के लिए, लेकिन 1 + एक्स अनुपूरक अपवाद उठाता है: डी – ElKamina

संबंधित मुद्दे