Jika Anda bertanya tentang numpy.logical_or
, maka tidak, seperti yang dikatakan dokumen secara eksplisit, satu-satunya parameter adalah x1, x2
, dan secara opsional out
:
numpy.
logical_or
( x1, x2[, out]
) =<ufunc 'logical_or'>
Anda tentu saja dapat menyatukan beberapa logical_or
panggilan seperti ini:
>>> x = np.array([True, True, False, False])
>>> y = np.array([True, False, True, False])
>>> z = np.array([False, False, False, False])
>>> np.logical_or(np.logical_or(x, y), z)
array([ True, True, True, False], dtype=bool)
Cara untuk menggeneralisasi rangkaian jenis ini di NumPy adalah dengan reduce
:
>>> np.logical_or.reduce((x, y, z))
array([ True, True, True, False], dtype=bool)
Dan tentu saja ini juga akan berfungsi jika Anda memiliki satu larik multi-dimensi, bukan larik terpisah — faktanya, begitulah maksud penggunaannya:
>>> xyz = np.array((x, y, z))
>>> xyz
array([[ True, True, False, False],
[ True, False, True, False],
[False, False, False, False]], dtype=bool)
>>> np.logical_or.reduce(xyz)
array([ True, True, True, False], dtype=bool)
Tapi tuple dari tiga array 1D yang sama panjangnya adalah array_like dalam istilah NumPy, dan dapat digunakan sebagai array 2D.
Di luar NumPy, Anda juga dapat menggunakan Python reduce
:
>>> functools.reduce(np.logical_or, (x, y, z))
array([ True, True, True, False], dtype=bool)
Namun, tidak seperti NumPy reduce
, Python tidak sering dibutuhkan. Untuk kebanyakan kasus, ada cara yang lebih sederhana untuk melakukan sesuatu — misalnya, untuk menyatukan beberapa or
operator Python , jangan reduce
selesai operator.or_
, cukup gunakan any
. Dan ketika ada tidak , itu biasanya lebih mudah dibaca menggunakan loop eksplisit.
Dan nyatanya NumPy's any
bisa digunakan untuk kasus ini juga, meski tidak sepele; jika Anda tidak secara eksplisit memberikan sumbu, Anda akan berakhir dengan skalar, bukan array. Begitu:
>>> np.any((x, y, z), axis=0)
array([ True, True, True, False], dtype=bool)
As you might expect, logical_and
is similar—you can chain it, np.reduce
it, functools.reduce
it, or substitute all
with an explicit axis
.
What about other operations, like logical_xor
? Again, same deal… except that in this case there is no all
/any
-type function that applies. (What would you call it? odd
?)
any()
?