2010-07-01 17 views
10

यदि मेरे पास numpy arrays की एक सूची है, तो निकालने विधि का उपयोग करके एक मान त्रुटि लौटाती है।आप numpy arrays की सूची से एक numpy सरणी को कैसे हटाते हैं?

उदाहरण के लिए:

import numpy as np 

l = [np.array([1,1,1]),np.array([2,2,2]),np.array([3,3,3])] 

l.remove(np.array([2,2,2])) 

मुझे

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

मैं सभी() काम करने के लिए प्राप्त करने के लिए नहीं कर पा रहे दे सकते हैं, यह संभव नहीं है?

+0

बस इतना ही आपको पता है, 'सूची' को चर के रूप में उपयोग करना अच्छा नहीं है क्योंकि यह पायथन में एक कीवर्ड है। यह बाद में आपको काटने के लिए वापस आ सकता है। –

+0

हां धन्यवाद, इस समस्या को हल करने के लिए चारों ओर खेलते समय मुझे काट दिया गया था, सूची() का उपयोग करके सरणी में सरणी को परिवर्तित करना और फिर निकालने का उपयोग करना। –

उत्तर

10

समस्या यह है कि जब दो numpy arrays की तुलना == के साथ की जाती है, जैसे निकालें() और अनुक्रमणिका() विधियों में, बूलियन मानों (तत्व तुलना द्वारा तत्व) की एक numpy सरणी लौटा दी जाती है जिसे समझा जाता है अस्पष्ट होना समानता के लिए दो numpy arrays की तुलना करने का एक अच्छा तरीका numpy के array_equal() फ़ंक्शन का उपयोग करना है।

चूंकि सूचियों() सूचियों की विधि में कोई महत्वपूर्ण तर्क नहीं है (जैसे सॉर्ट() करता है), मुझे लगता है कि आपको ऐसा करने के लिए अपना स्वयं का कार्य करने की आवश्यकता है। यहां एक ऐसा है जो मैंने बनाया:

def removearray(L,arr): 
    ind = 0 
    size = len(L) 
    while ind != size and not np.array_equal(L[ind],arr): 
     ind += 1 
    if ind != size: 
     L.pop(ind) 
    else: 
     raise ValueError('array not found in list.') 

यदि आपको तेज़ी से होने की आवश्यकता है तो आप इसे साइथन-इज़ कर सकते हैं।

+0

धन्यवाद, बहुत उपयोगी! –

2

ये रहा:

list.pop(1) 

अद्यतन:

list.pop(list.index(element)) 

मुझे नहीं लगता कि आप सूची से गुजरने तत्व की स्थिति को खोजने के लिए चारों ओर से प्राप्त कर सकते है। इसके बारे में चिंता मत करो। पाइथन डिफ़ॉल्ट रूप से आपके लिए कम से कम लागत खोजने के लिए एक अच्छी खोज एल्गोरिदम का उपयोग करेगा।

+0

धन्यवाद, मुझे एहसास है कि मेरे उदाहरण के लिए काम करता है लेकिन जहां मुझे वास्तव में ऐसा करने की ज़रूरत है, मुझे उस सरणी की स्थिति नहीं पता है जिसे मैं निकालना चाहता हूं। एक लूप का उपयोग करने के बजाय मैंने सोचा कि हटाने विधि का उपयोग कर एक अच्छा तरीका हो सकता है। –

+1

इस के साथ मेरी मदद करने के लिए धन्यवाद। अगर मैं एक numpy सरणी के लिए list.index() का उपयोग करता हूं तो मुझे फिर से संदिग्ध सत्य त्रुटि मिलती है, हम्म। –

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