2010-05-14 7 views
36

मुझे ऐसे फ़ंक्शन की आवश्यकता है जो किसी सरणी से गैर-NaN मान देता है।numpy में कार्यक्षमता "isnotnan" कार्यक्षमता, क्या यह अधिक पाइथनिक हो सकता है?

>>> a = np.array([np.nan, 1, 2]) 
>>> a 
array([ NaN, 1., 2.]) 

>>> np.invert(np.isnan(a)) 
array([False, True, True], dtype=bool) 

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

पायथन: 2.6.4 numpy: 1.3.0

साझा करें यदि आप एक बेहतर तरीका पता है, धन्यवाद

उत्तर

21

आप वर्तमान में मैं इसे इस तरह कर रहा हूँ वर्तमान में ऐसी किसी भी चीज़ के लिए परीक्षण कर रहे हैं जो NaN नहीं है और mtrw को ऐसा करने का सही तरीका है। आप परिमित संख्या के लिए परीक्षण में रुचि रखते हैं तो आप एक व्युत्क्रम की जरूरत नहीं है और उपयोग कर सकते हैं (NaN नहीं है और INF नहीं है):

np.isfinite(a) 

अधिक pythonic और देशी, एक आसान पढ़ा, और जब आप अक्सर नाएन से बचना चाहते हैं आप भी अपने अनुभव में आईएनएफ से बचना चाहते हैं।

बस सोचा कि मैं वहां लोगों के लिए इसे टॉस कर दूंगा।

+2

नोट: यदि आप पांडों को फ़िल्टर करने के लिए isnotnan का उपयोग करना चाहते हैं, तो यह तरीका है। –

+0

@ चार्लीहेली 'pd.notnull() 'पांडा के लिए एक बेहतर विकल्प नहीं होगा? –

+0

@ जोश डीडी। मैंने कोड की जांच की है और pd.notnull() संख्यात्मक मानों के बजाय * ऑब्जेक्ट्स * परीक्षण के लिए है, यदि ऑब्जेक्ट सरणी में कोई ऑब्जेक्ट किसी ऑब्जेक्ट का उदाहरण नहीं है तो ऋणात्मक लौट रहा है। यह np.isfinite() से धीमा हो जाएगा लेकिन मनमानी ऑब्जेक्ट सरणी (जैसे सूचियों के सरणी) को संभालने में सक्षम है। साफ खोज लें, और एक अच्छा विचार अगर आपकी सरणी में मनमानी वस्तुओं को शामिल किया जा सकता है। मुझे लगता है कि अगर आप भरोसा कर सकते हैं कि आपकी सरणी आम तौर पर नाएन और आईएनएफ को छोड़कर संख्यात्मक है तो np.isfinite तेज होगा, इसलिए उपयोग के मामले पर निर्भर करता है। इसे लाने के लिए धन्यवाद, मुझे नहीं लगता कि उत्तर पोस्ट होने पर यह आसपास था। –

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