Alasan pengecualian adalah bahwa andpanggilan secara implisit bool. Pertama di operan kiri dan (jika operan kiri True) maka di operan kanan. Jadi x and ysetara dengan bool(x) and bool(y).
Namun boolpada a numpy.ndarray(jika mengandung lebih dari satu elemen) akan mengeluarkan pengecualian yang telah Anda lihat:
>>> import numpy as np
>>> arr = np.array([1, 2, 3])
>>> bool(arr)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
The bool()panggilan yang implisit and, tetapi juga dalam if, while, or, sehingga salah satu contoh berikut akan juga gagal:
>>> arr and arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> if arr: pass
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> while arr: pass
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> arr or arr
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Ada lebih banyak fungsi dan pernyataan dalam Python yang menyembunyikan boolpanggilan, misalnya 2 < x < 10hanyalah cara penulisan lainnya 2 < x and x < 10. Dan andakan memanggil bool: bool(2 < x) and bool(x < 10).
The elemen-bijaksana setara untuk andakan menjadi np.logical_andfungsi, sama Anda bisa menggunakan np.logical_orsebagai setara untuk or.
Untuk array boolean - dan perbandingan suka <, <=, ==, !=, >=dan >pada NumPy array kembali array NumPy boolean - Anda juga dapat menggunakan elemen-bijaksana bitwise fungsi (dan operator): np.bitwise_and( &operator)
>>> np.logical_and(arr > 1, arr < 3)
array([False, True, False], dtype=bool)
>>> np.bitwise_and(arr > 1, arr < 3)
array([False, True, False], dtype=bool)
>>> (arr > 1) & (arr < 3)
array([False, True, False], dtype=bool)
dan bitwise_or( |operator):
>>> np.logical_or(arr <= 1, arr >= 3)
array([ True, False, True], dtype=bool)
>>> np.bitwise_or(arr <= 1, arr >= 3)
array([ True, False, True], dtype=bool)
>>> (arr <= 1) | (arr >= 3)
array([ True, False, True], dtype=bool)
Daftar lengkap fungsi logis dan biner dapat ditemukan di dokumentasi NumPy: