2016-08-03 14 views
6

मेरे पास कुछ numpy arrays हैं, a, b, और c कहें, और उन सभी पर लागू करने के लिए mask बनाया है।NumPy बूलियन सरणी चेतावनी?

मैं उन्हें इस तरह के रूप मुखौटा कोशिश कर रहा हूँ:

a = a[mask]

जहां mask एक bool सरणी है। यह ध्यान देने योग्य है कि मैं सत्यापित किया है लायक है कि

len(a) = len(b) = len(c) = len(mask)

और मैं एक नहीं बल्कि गुप्त लग चेतावनी हो रही है:

FutureWarning: in the future, boolean array-likes will be handled as a boolean array index

+1

वह त्रुटि इंगित करती है कि आप एक इंडेक्स के रूप में 0-आयामी बुलियन सरणी का उपयोग करने का प्रयास कर रहे हैं। उस ऑपरेशन के अर्थशास्त्र बदलने की प्रक्रिया में हैं। आपने कैसे सत्यापित किया कि 'मास्क' 'लेन' के साथ भी एक चीज है? – user2357112

+0

रुको, नहीं, गलत चेतावनी। क्या आपको किसी भी तरह 'मास्क' के लिए एक सूची मिली है? – user2357112

उत्तर

13

झूठी == 0, और यह सच है == 1. यदि आपका मुखौटा एक सूची है, और एक ndarray नहीं, तो आप कुछ अनपेक्षित व्यवहार प्राप्त कर सकते हैं:

>>> a = np.array([1,2,3]) 
>>> mask_list = [True, False, True] 
>>> a[mask_list] 
__main__:1: FutureWarning: in the future, boolean array-likes will be handled as a boolean array index 
array([2, 1, 2]) 

जहां इस सरणी से बना है एक [1], एक [ 0], और एक [1], बस

>>> a[np.array([1,0,1])] 
array([2, 1, 2]) 

दूसरी ओर की तरह:

>>> mask_array = np.array(mask_list) 
>>> mask_array 
array([ True, False, True], dtype=bool) 
>>> a[mask_array] 
array([1, 3]) 

चेतावनी आपको बता रहा है कि अंततः a[mask_list] आप a[mask_array] के रूप में ही दे देंगे (जो शायद क्या है आप चाहते थे कि यह आपको पहले स्थान पर दे।)

+0

आह, बहुत बहुत धन्यवाद, समझ में आता है। 'Mask = np.array (mask_expression, dtype = bool) के माध्यम से एक numpy सरणी में सूची कास्टिंग करके फिक्स्ड – Anonymous