2012-08-29 9 views
8

मेरे पास एक बड़ा scipy.sparse.csc_matrix है और इसे सामान्य बनाना चाहते हैं। यह प्रत्येक तत्व से कॉलम माध्य घटाता है और कॉलम मानक विचलन (std) i द्वारा विभाजित करता है Iमैं सिसि में एक स्पैर मैट्रिक्स के कॉलम के भिन्नता की गणना कैसे करूं?

scipy.sparse.csc_matrix में .mean() है लेकिन क्या भिन्नता या std की गणना करने का कोई प्रभावी तरीका है?

+5

मैं एक वेक्टरीकृत फैशन में भिन्नता की गणना करने के लिए कुछ पायथन कोड पोस्ट करने जा रहा था, लेकिन यदि आप इसे "सामान्यीकृत करते हैं" तो आपके पास कोई शून्य तत्व नहीं छोड़ेगा, इसलिए इससे पहले कि कृपया मुझे बताएं कि आप गड़बड़ नहीं कर रहे हैं वैसे भी आपकी sparsity संरचना। – seberg

+0

यह सेबस्टियन का एक बहुत ही अच्छा बिंदु है, धन्यवाद। मैंने इसके बारे में नहीं सोचा था। सादगी के लिए – nickponline

उत्तर

5

आप विचरण खुद की गणना मतलब का उपयोग करते हुए, निम्नलिखित formula साथ कर सकते हैं: मतलब के लिए

E[X^2] - (E[X])^2 

E[X] खड़ा है। तो E[X^2] की गणना करने के लिए आपको csc_matrix को स्क्वायर करना होगा और फिर mean फ़ंक्शन का उपयोग करना होगा। (E[X])^2 प्राप्त करने के लिए आपको सामान्य इनपुट का उपयोग करके प्राप्त mean फ़ंक्शन के परिणाम को बस स्क्वायर करने की आवश्यकता है।

+2

मैट्रिक्स को स्क्वायर करने के लिए: 'c = matrix.copy(); c.data ** = 2' और फिर 'c.mean (0); डेल सी' (केवल '.data' को प्रतिस्थापित कर सकता है)। लेकिन मैं यह मानता हूं कि ओपी सभी तत्वों से घटने के लिए गलत कहता है। – seberg

+0

उत्तर और टिप्पणियों के लिए धन्यवाद। – nickponline

3

कारगर तरीका वास्तव में पूरे मैट्रिक्स घना है, तो हमेशा की तरह यह प्रमाण के

X = X.toarray() 
X -= X.mean() 
X /= X.std() 

साथ @Sebastian अपनी टिप्पणी में उल्लेख किया गया है के रूप में है, मानकीकरण विरलता संरचना को नष्ट कर देता (गैर के बहुत सारे का परिचय शून्य तत्व) घटाव चरण में, इसलिए मैट्रिक्स को एक स्पैस प्रारूप में रखने का कोई उपयोग नहीं है।

+0

यह वास्तव में सच नहीं है। Sicco के उत्तर में सूत्र का उपयोग कंप्यूटिंग समय को कम करने के लिए sparsity का उपयोग करने की अनुमति देता है। –

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