मुझे एक फ़ंक्शन लिखने की ज़रूरत है जो यह पता लगाएगी कि इनपुट में कम से कम एक मूल्य है जो गैर-संख्यात्मक है। यदि एक गैर-संख्यात्मक मान पाया जाता है, तो मैं एक त्रुटि बढ़ाऊंगा (क्योंकि गणना को केवल एक संख्यात्मक मान वापस करना चाहिए)। इनपुट सरणी के आयामों की संख्या अग्रिम में ज्ञात नहीं है - फ़ंक्शन को ndim की परवाह किए बिना सही मूल्य देना चाहिए। एक अतिरिक्त जटिलता के रूप में इनपुट एक एकल फ्लोट या numpy.float64
शून्य-विषम सरणी की तरह कुछ विषम हो सकता है ।
इसे हल करने का स्पष्ट तरीका एक पुनरावर्ती कार्य लिखना है जो कि सरणी में प्रत्येक चलने योग्य वस्तु पर पुनरावृत्ति करता है जब तक कि यह एक गैर-पुनरावृत्ति नहीं पाता। यह numpy.isnan()
प्रत्येक गैर-चलने योग्य ऑब्जेक्ट पर फ़ंक्शन को लागू करेगा । यदि कम से कम एक गैर-संख्यात्मक मूल्य पाया जाता है, तो फ़ंक्शन तुरंत गलत वापस आ जाएगा। अन्यथा यदि चलने योग्य सभी मान संख्यात्मक हैं, तो यह अंतत: सत्य हो जाएगा।
यह ठीक काम करता है, लेकिन यह बहुत धीमा है और मुझे उम्मीद है कि NumPy के पास इसे करने का एक बेहतर तरीका है। एक विकल्प क्या है जो तेज और अधिक सुन्न है?
यहाँ मेरा मजाक है:
def contains_nan( myarray ):
"""
@param myarray : An n-dimensional array or a single float
@type myarray : numpy.ndarray, numpy.array, float
@returns: bool
Returns true if myarray is numeric or only contains numeric values.
Returns false if at least one non-numeric value exists
Not-A-Number is given by the numpy.isnan() function.
"""
return True
array(['None', 'None'], dtype=object)
? क्या इस तरह के इनपुट से सिर्फ एक अपवाद बढ़ सकता है?
float('nan') in x
। यह काम नहीं करता।
contains_nan
संदिग्ध लग रहा है: "कम से कम एक गैर-संख्यात्मक मान मौजूद होने पर झूठे"। यदि सरणी में NaN होता है, तो मुझेcontains_nan
वापस लौटने की उम्मीद होगीTrue
।