2016-04-01 14 views
8

जानने के बिना किसी ऑब्जेक्ट सरणी से किसी ऑब्जेक्ट को कैसे हटाएं, ऑब्जेक्ट की अनुक्रमणिका को जानने के बिना ऑब्जेक्ट सरणी से ऑब्जेक्ट को हटाना संभव है, लेकिन ऑब्जेक्ट को स्वयं जानते हुए?इंडेक्स

मैंने देखा है कि यह np.delete समारोह का उपयोग कर वस्तु के सूचकांक का उपयोग कर सकता है, लेकिन मैं वस्तु नहीं बल्कि अपने सूचकांक यह होने करने के लिए एक रास्ता तलाश कर रहा हूँ

उदाहरण:

[क, ख, ग, डी, ई, एफ]

एक्स = ई

मैं मिटा देना चाहते हैं एक्स

अग्रिम

उत्तर

12

आप np.argwhere का उपयोग कर वस्तु का सूचकांक/सूचकांक पा सकते हैं, और फिर वस्तु (रों) np.delete का उपयोग कर हटाना में THX।

उदाहरण:

x = np.array([1,2,3,4,5]) 
index = np.argwhere(x==3) 
y = np.delete(x, index) 
print(x, y) 
+0

thx बहुत, इसने मेरे जीवन को आसान बना दिया! :) – MhmdMnsr

2

बूलियन अनुक्रमण या मास्किंग चयन का एक अच्छा बुनियादी तरीका है, या एक सरणी

आप एक विशिष्ट 'वस्तु' शब्द को हटा के बारे में बात के विशिष्ट तत्वों को हटाने के। के कि सचमुच लेने के लिए और dtype वस्तु की एक सरणी को परिभाषित करते हैं:

In [2]: x=np.array(['a','b','c','d','e'],dtype=object) 
In [3]: x 
Out[3]: array(['a', 'b', 'c', 'd', 'e'], dtype=object) 
In [4]: x=='d' # elements that equal 'd' 
Out[4]: array([False, False, False, True, False], dtype=bool) 
In [5]: x!='d' # elements that don't 
Out[5]: array([ True, True, True, False, True], dtype=bool) 
In [6]: x[x!='d'] # select a subset 
Out[6]: array(['a', 'b', 'c', 'e'], dtype=object) 

दृश्यों argwhere और delete इस प्रयोग के पीछे। ध्यान दें कि argwherex==d बूलियन सरणी का उपयोग करता है, जो इसे सरणी इंडेक्स में परिवर्तित करता है। और इस तरह मुखौटा बनाना एक तरीका है कि delete संचालित होता है।

कुछ महत्वपूर्ण सीमा नहीं है:

  • समानता (या नहीं समानता) परीक्षण अपने मूल्यों के लिए काम करने के लिए है। यह नहीं हो सकता है कि तत्व तैर रहे हैं।

  • 1 डी सरणी से हटाना 2 डी (या बड़ा) से आसान है। 2 डी के साथ आपको यह तय करना होगा कि कोई पंक्ति, कॉलम, या तत्व (और सरणी को फ़्लैटन करने की प्रक्रिया में) को हटाना है या नहीं।

  • उन मैचों का केवल एक तत्व हटाना थोड़ा सा ट्रिकियर है।

कुछ मामलों के लिए यह .tolist() सरणी के लिए बेहतर हो सकता है और एक सूची विधि का उपयोग हो सकता है।

In [32]: xl=x.tolist() 
In [33]: xl.remove('d') 
In [34]: np.array(xl,dtype=object) 
Out[34]: array(['a', 'b', 'c', 'e'], dtype=object) 

एरे के लिए list.remove के बराबर सटीक नहीं है।

5

एक numpy सरणी के रूप में यह कास्ट, और वहाँ एक बहुत ही सरल चाल है:

x = np.array(list("abcdef")) 

x = x[x!='e'] # <-- THIS IS THE TRICK 

print x 
# array(['a', 'b', 'c', 'd', 'f']) 

इस तुलना में अधिक जटिल होने की जरूरत नहीं है।

+0

यह वास्तव में मूल्य को हटाने की समस्या को हल नहीं करता है। – MANA624

+0

क्या आप इस तथ्य का जिक्र कर रहे हैं कि मैं वास्तव में एक्स [x! = 'E'] को x चर में नहीं डाल रहा हूं? –

+0

मुझे "कृपया ..." मत करो। यह सिर्फ एक सुझाव था। – MANA624