ฉันต้องเขียนฟังก์ชันที่จะตรวจสอบว่าอินพุตมีค่าอย่างน้อยหนึ่งค่าที่ไม่ใช่ตัวเลขหรือไม่ หากพบค่าที่ไม่ใช่ตัวเลขฉันจะเพิ่มข้อผิดพลาด (เนื่องจากการคำนวณควรส่งคืนค่าตัวเลขเท่านั้น) ไม่ทราบจำนวนมิติของอาร์เรย์อินพุตล่วงหน้า - ฟังก์ชันควรให้ค่าที่ถูกต้องโดยไม่คำนึงถึง ndim ในฐานะที่เป็นความซับซ้อนเพิ่มเติมอินพุตอาจเป็นลูกลอยเดียวหรือnumpy.float64
หรือแม้แต่บอลคี่เช่นอาร์เรย์ศูนย์มิติ
วิธีที่ชัดเจนในการแก้ปัญหานี้คือการเขียนฟังก์ชันแบบวนซ้ำซึ่งจะวนซ้ำบนทุกออบเจ็กต์ที่ทำซ้ำได้ในอาร์เรย์จนกว่าจะพบสิ่งที่ไม่ใช่อิเทราบี จะใช้numpy.isnan()
ฟังก์ชันนี้กับทุกออบเจ็กต์ที่ไม่สามารถทำซ้ำได้ หากพบค่าที่ไม่ใช่ตัวเลขอย่างน้อยหนึ่งค่าฟังก์ชันจะส่งคืน False ทันที มิฉะนั้นหากค่าทั้งหมดในการทำซ้ำเป็นตัวเลขจะส่งกลับ True ในที่สุด
ใช้งานได้ดี แต่ค่อนข้างช้าและฉันคาดหวังว่า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
contains_nan
ดูน่าสงสัย: "ส่งกลับเท็จหากมีค่าที่ไม่ใช่ตัวเลขอย่างน้อยหนึ่งค่า" ฉันคาดว่าcontains_nan
จะกลับมาTrue
ถ้าอาร์เรย์มี NaN