Saya ingin memeriksa apakah variabelnya None atau numpy.array. Saya telah menerapkan check_a
fungsi untuk melakukan ini.
def check_a(a):
if not a:
print "please initialize a"
a = None
check_a(a)
a = np.array([1,2])
check_a(a)
Tapi, kode ini memunculkan ValueError. Apa cara lurus ke depan?
ValueError Traceback (most recent call last)
<ipython-input-41-0201c81c185e> in <module>()
6 check_a(a)
7 a = np.array([1,2])
----> 8 check_a(a)
<ipython-input-41-0201c81c185e> in check_a(a)
1 def check_a(a):
----> 2 if not a:
3 print "please initialize a"
4
5 a = None
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
ValueError
adalah salah satunumpy
pertanyaan paling umum . Artinyanot a
menghasilkan array boolean, dengan (dalam hal ini) 2 nilai. Array boolean ini tidak dapat digunakan sebagaiif
kondisi! Theis None
alternatif yang baik untuk mengetahui, tetapi Anda juga harus memahami kesalahan ini.not
, jadi kesalahan sebenarnya terjadi saatnot
mencoba memperlakukan array sebagai boolean tunggal dan ternyata tidak bisa. Jika sudah~a
, itu akan menggunakan NumPy overload dan gagal ketikaif
mencoba menggunakan array yang dinegasikan sebagai boolean tunggal.Jawaban:
Menggunakan
not a
untuk menguji apakaha
adalahNone
mengasumsikan bahwa nilai-nilai lain yang mungkin daria
memiliki nilai kebenaranTrue
. Namun, kebanyakan array NumPy tidak memiliki nilai kebenaran sama sekali, dannot
tidak dapat diterapkan padanya.Jika Anda ingin menguji apakah suatu objek
None
, cara yang paling umum dan dapat diandalkan adalah dengan menggunakan tandais
centangNone
:Ini tidak bergantung pada objek yang memiliki nilai kebenaran, jadi ini bekerja dengan array NumPy.
Perhatikan bahwa tesnya harus
is
, bukan==
.is
adalah tes identitas objek.==
adalah apa pun yang dikatakan argumen itu, dan array NumPy mengatakan itu adalah perbandingan persamaan elemen yang disiarkan, menghasilkan array boolean:Di sisi lain, jika Anda ingin menguji apakah suatu objek adalah array NumPy, Anda dapat menguji tipenya:
Anda juga bisa menggunakan
isinstance
, yang juga akan mengembalikanTrue
subclass dari tipe itu (jika itu yang Anda inginkan). Mempertimbangkan betapa buruk dan tidak kompatibelnyanp.matrix
, Anda mungkin sebenarnya tidak menginginkan ini:sumber
Jika Anda mencoba melakukan sesuatu yang sangat mirip
a is not None
:, masalah yang sama akan muncul. Artinya, Numpy mengeluh harus menggunakana.any
ataua.all
.Solusinya adalah dengan melakukan:
Tidak terlalu cantik, tapi berhasil.
sumber
Anda dapat melihat apakah benda itu berbentuk atau tidak
sumber