我需要编写一个函数来检测输入是否包含至少一个非数字值。如果找到非数字值,我将引发错误(因为计算应该只返回一个数字值)。输入数组的维数事先是未知的——不管 ndim 函数应该给出正确的值。作为一个额外的复杂因素,输入可能是单个浮点数,numpy.float64
甚至是零维数组之类的奇怪东西。
解决这个问题的明显方法是编写一个递归函数,它遍历数组中的每个可迭代对象,直到找到一个非迭代对象。它将将该numpy.isnan()
函数应用于每个不可迭代的对象。如果找到至少一个非数字值,则该函数将立即返回 False。否则,如果 iterable 中的所有值都是数字,它最终将返回 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