最佳答案
我需要写一个函数来检测输入是否至少包含一个非数值的值。如果找到一个非数值,我将引发一个错误(因为计算应该只返回一个数值)。输入数组的维数事先并不知道-无论 ndim 是什么,函数都应该给出正确的值。作为一个额外的复杂输入可能是一个单一的浮点数或 numpy.float64
,甚至像零维数组一样的奇怪的东西。
解决这个问题的显而易见的方法是编写一个递归函数,它迭代数组中的每个可迭代对象,直到找到一个非迭代对象。它将在每个不可迭代的对象上应用 numpy.isnan()
函数。如果至少找到一个非数值,那么函数将立即返回 False。否则,如果迭代器中的所有值都是数值,那么它最终将返回 True。
这种方法工作得很好,但是速度非常慢,我希望 笨蛋有更好的方法来实现这一点。有什么替代方案更快更麻木?
这是我的模型:
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