मैं sparse.lil_matrix प्रारूप का उपयोग कर रहा है, तो मैं कैसे मैट्रिक्स से एक स्तंभ आसानी से और कुशलता से निकाल सकते हैं?मैं एक स्पैर मैट्रिक्स से कुशलता से कॉलम कैसे हटा सकता हूं?
उत्तर
मैं इसे स्वयं चाहता हूं और सच में अभी तक ऐसा करने के लिए एक शानदार अंतर्निहित तरीका नहीं है। इसे करने का एक तरीका यहां है। मैंने lil_matrix का उप-वर्ग बनाना चुना और remove_col फ़ंक्शन जोड़ दिया। यदि आप चाहते हैं, आप के बजाय removecol समारोह lil_matrix कक्षा में अपने lib/site-packages/scipy/sparse/lil.py
फ़ाइल में जोड़ सकते हैं। कोड यह रहा:
from scipy import sparse
from bisect import bisect_left
class lil2(sparse.lil_matrix):
def removecol(self,j):
if j < 0:
j += self.shape[1]
if j < 0 or j >= self.shape[1]:
raise IndexError('column index out of bounds')
rows = self.rows
data = self.data
for i in xrange(self.shape[0]):
pos = bisect_left(rows[i], j)
if pos == len(rows[i]):
continue
elif rows[i][pos] == j:
rows[i].pop(pos)
data[i].pop(pos)
if pos == len(rows[i]):
continue
for pos2 in xrange(pos,len(rows[i])):
rows[i][pos2] -= 1
self._shape = (self._shape[0],self._shape[1]-1)
मैं इसे बाहर की कोशिश की है और किसी भी कीड़े नहीं दिख रहा। मुझे निश्चित रूप से लगता है कि कॉलम को टुकड़ा करने से बेहतर है, जो अभी तक मुझे पता है कि एक नया मैट्रिक्स बनाता है।
मैंने एक रिमूवर समारोह भी करने का फैसला किया, लेकिन मुझे नहीं लगता कि यह हटाने के रूप में उतना ही अच्छा है। मैं जिस तरह से चाहता हूं उसमें एक अंडारे से एक पंक्ति को हटाने में सक्षम नहीं होने के कारण मैं सीमित हूं। यहां रीमूवरो है जिसे उपरोक्त वर्ग
def removerow(self,i):
if i < 0:
i += self.shape[0]
if i < 0 or i >= self.shape[0]:
raise IndexError('row index out of bounds')
self.rows = numpy.delete(self.rows,i,0)
self.data = numpy.delete(self.data,i,0)
self._shape = (self._shape[0]-1,self.shape[1])
शायद मुझे इन कार्यों को Scipy भंडार में सबमिट करना चाहिए।
def removecols(W, col_list):
if min(col_list) = W.shape[1]:
raise IndexError('column index out of bounds')
rows = W.rows
data = W.data
for i in xrange(M.shape[0]):
for j in col_list:
pos = bisect_left(rows[i], j)
if pos == len(rows[i]):
continue
elif rows[i][pos] == j:
rows[i].pop(pos)
data[i].pop(pos)
if pos == len(rows[i]):
continue
for pos2 in xrange(pos,len(rows[i])):
rows[i][pos2] -= 1
W._shape = (W._shape[0], W._shape[1]-len(col_list))
return W
इनपुट के रूप में col_list के साथ काम करने के लिए बस अपना कोड दोबारा लिखें - शायद यह किसी के लिए सहायक होगा।
मैं पाइथन के लिए नया हूं इसलिए मेरा जवाब शायद गलत है, लेकिन मैं सोच रहा था कि निम्नलिखित में से कुछ क्यों कुशल नहीं होगा?
mat=hstack([ mat[:,0:i] , mat[:,i+1:] ])
अब मैट्रिक्स उसके बाद एक coo_matrix में बदल जाएगा लेकिन आप इसे lil_matrix को फिर से चालू कर सकते हैं:
कि आप i-वें स्तंभ निकालना चाहते हैं अपने lil_matrix चटाई कहा जाता है का कहना है और देता है।
ठीक है, मैं समझता हूं कि मैट वैरिएबल को असाइनमेंट करने से पहले इसे हस्टैक के अंदर दो मैट्रिक्स बनाना होगा, इसलिए यह मूल मैट्रिक्स प्लस एक ही समय में एक जैसा होगा लेकिन मुझे लगता है कि अगर विरलता पर्याप्त तो मुझे लगता है कि वहाँ किसी भी स्मृति समस्याओं नहीं होना चाहिए (क्योंकि स्मृति (और समय) विरल मैट्रिक्स का उपयोग कर के पूरे कारण है) बड़ा है।
ऐसा लगता है कि कोई प्रश्न नहीं है। –
बहुत सरल है और तेजी से। तुम भी सीएसआर के लिए रूपांतरण की जरूरत नहीं है, लेकिन मैं सिर्फ यकीन है कि यह सीएसआर विरल मैट्रिक्स के साथ काम करता है और के बीच परिवर्तित एक मुद्दा नहीं होना चाहिए के लिए पता है।
from scipy import sparse
x_new = sparse.lil_matrix(sparse.csr_matrix(x)[:,col_list])
यह मेरे लिए काम नहीं करता है। – kevin
कॉलम स्लाइसिंग के लिए आप सीएसआर (संपीड़ित स्पैस पंक्ति) मैट्रिक्स का उपयोग क्यों कर रहे हैं? सीएसआर प्रारूप के नुकसान में से एक है 'धीमी कॉलम स्लाइसिंग ऑपरेशंस (सीएससी पर विचार करें)' (एससीआई डॉक्स के अनुसार)। आपको, शायद, 'csc_matrix' रूपांतरण का उपयोग करना चाहिए। – silentser
एक विरल सीएसआर मैट्रिक्स (एक्स) और सूचकांक की सूची के लिए ड्रॉप करने (index_to_drop):
to_keep = list(set(xrange(X.shape[1]))-set(index_to_drop))
new_X = X[:,to_keep]
यह csr_matrices को lil_matrices कन्वर्ट करने के लिए आसान है। lil_matrix documentation
ध्यान दें कि tosil() का उपयोग कर सीएसआर से लिल मैट्रिस तक जाने के लिए महंगा है। इसलिए, यह विकल्प अच्छा है जब आपको अपने मैट्रिक्स को lil प्रारूप में रखने की आवश्यकता नहीं होती है।
हमारे मामले में, प्रत्येक विरल मैट्रिक्स के लिए नोट को देखकर विशेष रूप से करके सीएससी मैट्रिक्स है दस्तावेज़ में सूचीबद्ध के रूप में यह निम्न लाभ हैं [1]
- कुशल अंकगणितीय आपरेशनों सीएससी + सीएससी, सीएससी * सीएससी, आदि ।
- कुशल स्तंभ टुकड़ा करने की क्रिया
- तेजी मैट्रिक्स वेक्टर उत्पादों (सीएसआर, बीएसआर तेजी से हो सकता है)
आप स्तंभ सूचकांक आप पानी है, तो हटाने के लिए, बस स्लाइसिंग का उपयोग करें। पंक्तियों को हटाने के लिए सीएसआर मैट्रिक्स का उपयोग करें क्योंकि यह पंक्ति स्लाइसिंग में कुशल है
- 1. एक स्पैर मैट्रिक्स से कॉलम को कुशलता से कैसे हटाएं जिसमें केवल शून्य शामिल है?
- 2. कम से कम एक स्पैर मैट्रिक्स?
- 3. एक स्पैर मैट्रिक्स
- 4. स्पैर मैट्रिक्स
- 5. स्पैर मैट्रिक्स
- 6. मैं एक टेक्स्ट फ़ाइल में एक बहुत बड़ा MATLAB स्पैर मैट्रिक्स कैसे सहेज सकता हूं?
- 7. फ़ंक्शन मानों से कुशलता से एक मैट्रिक्स बनाएं
- 8. मैं QTreeWidgetItem को एक QTreeWidget से कैसे हटा सकता हूं?
- 9. मैं यूआरएल से एक क्वेरी कैसे हटा सकता हूं?
- 10. मैं प्रतिभा डिपो से एक फ़ाइल कैसे हटा सकता हूं?
- 11. स्पैर मैट्रिक्स तत्वों का उपयोग कैसे करें?
- 12. एक स्पैर मैट्रिक्स को एक फ़ाइल
- 13. मैं सिसि में एक स्पैर मैट्रिक्स के कॉलम के भिन्नता की गणना कैसे करूं?
- 14. अजगर में स्पैर मैट्रिक्स svd
- 15. मैं एक सिम्लिंक कैसे हटा सकता हूं?
- 16. MySQL कुशलता से एक और
- 17. मैं टेम्पलेट से उपयोगकर्ता श्रेणी को कैसे हटा सकता हूं?
- 18. मैं स्टेजिंग क्षेत्र से निर्देशिका उपट्री कैसे हटा सकता हूं?
- 19. मैं टेक्स्ट से गैर शब्द वर्ण कैसे हटा सकता हूं?
- 20. मैं UIViewController से UINavigationBar को कैसे हटा सकता हूं?
- 21. मैं अपने प्रोजेक्ट से अनावश्यक संसाधन कैसे हटा सकता हूं?
- 22. मैं आईआईएस ऑब्जेक्ट्स को सी # से कैसे हटा सकता हूं?
- 23. मैं माइक्रोसॉफ़्ट वर्ड से पेजब्रैक कैसे हटा सकता हूं?
- 24. मैं अपने यूआरएल से "सीजीआई-बिन" कैसे हटा सकता हूं?
- 25. मैं सरणी से सभी अपरिचित कैसे हटा सकता हूं?
- 26. मैं किसी साझा ऑब्जेक्ट से प्रतीक कैसे हटा सकता हूं?
- 27. मैं गिटहब से शाखा कैसे हटा सकता हूं?
- 28. मैं स्ट्रिंग से अंतिम एन वर्ण कैसे हटा सकता हूं?
- 29. मैं वर्डप्रेस से वर्गीकरण कैसे हटा सकता हूं?
- 30. मैं प्रक्रिया आउटपुट से नई लाइन कैसे हटा सकता हूं?
मुझे खुशी है कि कोई मेरे पहले प्रयास में सुधार करने की कोशिश कर रहा है। हालांकि, लाइन 'if min (col_list) = W.shape [1]: 'कई तरीकों से मुझे समझ में नहीं आता है। सबसे पहले, यह पाइथन में एक तर्क में असाइनमेंट का उपयोग करने के लिए अमान्य वाक्यविन्यास है। दूसरा, आप आकार के साथ col_list के मिनट की जांच क्यों कर रहे हैं? मैं सोच रहा हूं कि शायद आप 'अधिकतम (col_list)> = W.shape [1]: '? बेशक, इसका मतलब है कि आप नकारात्मक सूचकांक का भी उपयोग नहीं कर सकते हैं और 0 से नीचे सूचकांक के लिए कोई जांच नहीं है और उनके साथ क्या करना है। –