यह प्रेरित है: python: Combined masking in numpy।गैर-सीमित मूल्यों को खोजने का सबसे तेज़ तरीका
कार्य उन सभी मूल्यों का एक बूलियन सरणी बनाना है जो परिमित नहीं हैं। उदाहरण के लिए:
>>> arr = np.array([0, 2, np.inf, -np.inf, np.nan])
>>> ~np.isfinite(arr)
array([False, False, True, True, True], dtype=bool)
मेरे लिए, ऐसा लगता है यह गैर-परिमित मूल्यों को खोजने का सबसे तेज़ तरीका हो सकता है, लेकिन ऐसा लगता है एक तेज़ तरीका नहीं है। विशेष रूप से np.isnan(arr - arr)
भी ऐसा ही करना चाहिए:
>>> np.isnan(arr - arr)
array([False, False, True, True, True], dtype=bool)
समय यह हम देखते हैं कि यह दोगुनी गति से है!
arr = np.random.rand(100000)
%timeit ~np.isfinite(arr)
10000 loops, best of 3: 198 µs per loop
%timeit np.isnan(arr - arr)
10000 loops, best of 3: 85.8 µs per loop
तो मेरे सवाल दोहरा है:
np.isnan(arr - arr)
चाल तेजी से "स्पष्ट"~np.isfinite(arr)
संस्करण की तुलना में क्यों है? क्या कोई इनपुट है जिसके लिए यह काम नहीं करता है?क्या सभी गैर-सीमित मूल्यों को खोजने का कोई तेज़ तरीका है? क्योंकि
np.isnan
औरnp.isfinite
निर्माण के आधार पर अलग सी कार्यों का उपयोग कर सकते हैं
पर धीमी है: यह एक अस्थायी सरणी से बचने के समय और स्मृति कम हो सकती है दिलचस्प बात यह है कि, मेरी मशीन में (लिनक्स 64 बिट्स, पायथन 3, न्यूपी 1.13.1) "स्पष्ट" विकल्प ~ 77.3 μs और 'इस्नान' विकल्प 135 μs लेता है।यदि मैं 'arr' के आकार को 10000000 तक बढ़ाता हूं तो अंतर भी बड़ा होता है, 12.5ms बनाम 89.8ms। – jdehesa
यह विंडोज 64 बिट, पायथन 2.7 और numpy 1.11.3 पर है। –
@ जोनासएडलर क्या आप समय कोड जोड़ सकते हैं ताकि अन्य आपके परिणाम पुन: पेश कर सकें (या नहीं)? –