Girdinin sayısal olmayan en az bir değer içerip içermediğini algılayacak bir işlev yazmam gerekiyor. Sayısal olmayan bir değer bulunursa, bir hata oluştururum (çünkü hesaplama yalnızca sayısal bir değer döndürmelidir). Giriş dizisinin boyutlarının sayısı önceden bilinmemektedir - fonksiyon, ndim'den bağımsız olarak doğru değeri vermelidir. Ekstra bir komplikasyon olarak, girdi tek bir kayan nokta olabilir veyanumpy.float64
veya hatta sıfır boyutlu bir dizi gibi garip bir şey olabilir.
Bunu çözmenin açık yolu, yinelemeli olmayan bir bulana kadar dizideki her yinelenebilir nesneyi yineleyen yinelemeli bir işlev yazmaktır. numpy.isnan()
İşlevi yinelenemeyen her nesneye uygulayacaktır . En az bir sayısal olmayan değer bulunursa, işlev hemen False döndürür. Aksi takdirde yinelenebilirdeki tüm değerler sayısal ise, sonunda True döndürür.
Bu gayet iyi çalışıyor, ancak oldukça yavaş ve NumPy'nin bunu yapmak için çok daha iyi bir yolu olmasını bekliyorum. Daha hızlı ve daha uyuşmuş bir alternatif nedir?
İşte mockup'ım:
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
array(['None', 'None'], dtype=object)
? Böyle bir girdi sadece bir istisna oluşturmalı mı?
float('nan') in x
. İşe yaramıyor.
contains_nan
şüpheli görünüyor: "En az bir sayısal olmayan değer varsa yanlış döndürür". Ben umuyordumcontains_nan
dönmek içinTrue
dizi NaN içeriyorsa.