Alasan pengecualian adalah bahwa and
panggilan secara implisit bool
. Pertama di operan kiri dan (jika operan kiri True
) maka di operan kanan. Jadi x and y
setara dengan bool(x) and bool(y)
.
Namun bool
pada 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 bool
panggilan, misalnya 2 < x < 10
hanyalah cara penulisan lainnya 2 < x and x < 10
. Dan and
akan memanggil bool
: bool(2 < x) and bool(x < 10)
.
The elemen-bijaksana setara untuk and
akan menjadi np.logical_and
fungsi, sama Anda bisa menggunakan np.logical_or
sebagai 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: