Saya perlu menulis fungsi yang akan mendeteksi jika input berisi setidaknya satu nilai yang non-numerik. Jika nilai non-numerik ditemukan, saya akan memunculkan kesalahan (karena kalkulasi seharusnya hanya mengembalikan nilai numerik). Jumlah dimensi dari larik input tidak diketahui sebelumnya - fungsi harus memberikan nilai yang benar terlepas dari ndim. Sebagai komplikasi tambahan, masukan bisa berupa float tunggal numpy.float64
atau bahkan sesuatu yang aneh seperti array berdimensi nol.
Cara yang jelas untuk mengatasinya adalah dengan menulis fungsi rekursif yang melakukan iterasi pada setiap objek yang dapat diulang dalam larik hingga menemukan non-iterabe. Ini akan menerapkan numpy.isnan()
fungsi di atas setiap objek yang tidak dapat diulang. Jika setidaknya satu nilai non-numerik ditemukan maka fungsi tersebut akan segera mengembalikan False. Sebaliknya, jika semua nilai dalam iterable adalah numerik, pada akhirnya akan mengembalikan True.
Itu berfungsi dengan baik, tetapi cukup lambat dan saya berharap NumPy memiliki cara yang jauh lebih baik untuk melakukannya. Apa alternatif yang lebih cepat dan numpyish?
Ini mockup saya:
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)
? Haruskah masukan seperti itu hanya menimbulkan pengecualian?
float('nan') in x
. Tidak bekerja.
contains_nan
terlihat mencurigakan: "Mengembalikan nilai salah jika setidaknya ada satu nilai non-numerik". Saya akan berharapcontains_nan
untuk kembaliTrue
jika array berisi NaN.