我需要写一个函数,它将检测输入是否包含至少一个非数字值。如果发现一个非数字值,我会引发一个错误(因为计算应该只返回一个数值)。输入数组的维数不是预先知道的 – 函数应该给出正确的值,而不考虑ndim。作为一个额外的复杂性,输入可以是单个浮动或numpy.float64或甚至奇怪的像零零维数组。
解决这个问题的明显方法是编写一个递归函数,它在数组中的每个可迭代对象上迭代,直到找到一个非迭代。它将对每个非可迭代对象应用numpy.isnan()函数。如果找到至少一个非数字值,那么函数将立即返回False。否则,如果iterable中的所有值都是numeric,它最终将返回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