|
发表于 2018-9-20 15:50:24
|
显示全部楼层
异常的原因是and隐式调用bool。首先是左操作数和(如果左操作数是True),然后是右操作数。所以x and y相当于bool(x) and bool(y)。
但是boolon numpy.ndarray(如果它包含多个元素)将抛出你看到的异常:
>>> 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()
在bool()中隐含的and,而且在if,while,or,所以任何的下面的示例也将失败:
>>> 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()
Python中有更多隐藏bool调用的函数和语句,例如2 < x < 10只是另一种编写方式2 < x and x < 10。而and将调用bool:bool(2 < x) and bool(x < 10)。
And等价于np.logical_and功能,同样np.logical_or等同于or。
对于布尔数组-和喜欢攀比<,<=,==,!=,>=和>对NumPy的数组返回布尔NumPy的阵列-你也可以使用逐元素按位功能: np.bitwise_and
- >>> 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)
复制代码
和bitwise_or:
- >>> 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)
复制代码
可以在NumPy文档中找到逻辑和二进制函数的完整列表:
• “逻辑功能”
• “二元操作”
|
|