我需要编写一个函数来检测输入是否包含至少一个非数字值。如果找到一个非数字值,我将引发一个错误(因为计算只能返回一个数值)。输入数组的维数是事先不知道的 - 无论ndim如何,函数都应该给出正确的值。作为一种额外的复杂功能,输入可以是单个浮点数或numpy.float64
,或者甚至是像零维数组那样的奇怪球体。检测NumPy数组是否至少包含一个非数字值?
解决此问题的显而易见的方法是编写一个递归函数,该函数遍历数组中的每个可迭代对象,直到找到一个非迭代。它将在每个不可迭代对象上应用numpy.isnan()
函数。如果至少找到一个非数字值,则该函数将立即返回False。否则,如果迭代中的所有值都是数值,它最终将返回True。
这工作得很好,但它很慢,我期望NumPy有一个更好的方法来做到这一点。什么是更快,更numpyish的选择?
这里是我的样机:
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`描述看起来很可疑:“如果至少一个非数字值存在返回false”。如果数组包含NaN,我会希望`contains_nan`返回`True`。 – 2009-05-26 18:00:59
输入如array(['None','None'],dtype = object)`?这样的输入是否会引发异常? – 2015-06-08 14:47:52
不要在x中使用float('nan')。这是行不通的。 – 2016-10-13 22:08:00