Numpy的“True”与Python的“True”不同,因此is失败:>>> import numpy as np
>>> a = np.array([True, True, False])
>>> a[:]
array([ True, True, False], dtype=bool)
>>> a[0]
True
>>> a[0]==True
True
>>> a[0] is True
False
>>> type(a[0])
>>> type(True)
另外,特别是,pep8说DONT对布尔人使用'is'或'==':
^{pr2}$
空numpy数组的测试结果与空Python列表或空dict一样:>>> [bool(x) for x in [[],{},np.array([])]]
[False, False, False]
与Python不同,单个false元素的numpy数组会测试false:>>> [bool(x) for x in [[False],[0],{0:False},np.array([False]), np.array([0])]]
[True, True, True, False, False]
但不能将该逻辑用于具有多个元素的numpy数组:>>> bool(np.array([0,0]))
Traceback (most recent call last):
File "", line 1, in
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
所以PEP8和Numpy的“精神”可能只是测试每个元素的真实性:>>> np.where(np.array([0,0]))
(array([], dtype=int64),)
>>> np.where(np.array([0,1]))
(array([1]),)
或使用any:>>> np.array([0,0]).any()
False
>>> np.array([0,1]).any()
True
请注意,这并不是您所期望的:>>> bool(np.where(np.array([0,0])))
True
因为np.where正在返回一个非空元组。在