ValueError: How to iterate through a tuple of Boolean True/False statements?
ValueError: How to iterate through a tuple of Boolean True/False statements?
我有一个 numpy ndarray tup1
语句 True
和 False
print(tup1)
array([[ True, False, False, False],
[ True, False, False, False],
[False, False, False, False],
[ True, True, False, False]], dtype=bool)
我想按以下方式遍历此元组 tup1
:
for i in tup1:
if i == True:
pass
else:
do something
这将对所有 'False' 条目进行一些操作。但是,这不起作用:我收到以下错误:
---------------------------------------------------------------------------
ValueError
Traceback (most recent call last)
<ipython-input-57-0d2a4ade1205> in <module>()
1 for i in tup1:
----> 2 if i == True:
3 pass
4 else:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
你有一个二维数组,所以只需创建一个嵌套的 for 循环,首先遍历每一行,然后遍历值:
for row in tup1:
for item in row:
if item: #equivalent to `if item == True`
pass
else:
dosomething()
或简单地为:
for row in tup1:
for item in row:
if not item: #equivalent to `if item == False`
dosomething()
您不能将列表与布尔值进行比较。您可以使用 np.array.all()
属性来检查所有项目是否为 True,如果数组中有任何 True 则使用 any()
,因此您可以使用 not any
检查所有项目这些项目是错误的:
>>> import numpy as np
>>>
>>> tup1 = np.array([[ True, False, False, False],
... [ True, False, False, False],
... [False, False, False, False],
... [ True, True, False, False]], dtype=bool)
>>> for i in tup1:
... if not i.any():
... print i
...
[False False False False]
你只需要在每个子数组上调用 .all
,如果所有的值都是 False if not ele.all()
将评估为 True,如果有任何 True 值那么它将评估为 False。
import numpy as np
arr = np.array([[ True, False, False, False],
[ True, False, False, False],
[False, False, False, False],
[ True, True, False, False]], dtype=bool)
for ele in arr:
if not ele.all():
# all values are False
如果你想要每个单独的布尔值,你可以在数组上调用 .flat:
for ele in arr.flat:
if not ele:
.....
在某些时间使用更大的数组,使用 .flat
比使用两个 for 循环要快得多:
In [5]: %%timeit
for row in arr:
for item in row:
pass
...:
100 loops, best of 3: 4.13 ms per loop
In [6]: %%timeit
for ele in arr.flat:
pass
...:
1000 loops, best of 3: 231 µs per loop
我有一个 numpy ndarray tup1
语句 True
和 False
print(tup1)
array([[ True, False, False, False],
[ True, False, False, False],
[False, False, False, False],
[ True, True, False, False]], dtype=bool)
我想按以下方式遍历此元组 tup1
:
for i in tup1:
if i == True:
pass
else:
do something
这将对所有 'False' 条目进行一些操作。但是,这不起作用:我收到以下错误:
---------------------------------------------------------------------------
ValueError
Traceback (most recent call last)
<ipython-input-57-0d2a4ade1205> in <module>()
1 for i in tup1:
----> 2 if i == True:
3 pass
4 else:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
你有一个二维数组,所以只需创建一个嵌套的 for 循环,首先遍历每一行,然后遍历值:
for row in tup1:
for item in row:
if item: #equivalent to `if item == True`
pass
else:
dosomething()
或简单地为:
for row in tup1:
for item in row:
if not item: #equivalent to `if item == False`
dosomething()
您不能将列表与布尔值进行比较。您可以使用 np.array.all()
属性来检查所有项目是否为 True,如果数组中有任何 True 则使用 any()
,因此您可以使用 not any
检查所有项目这些项目是错误的:
>>> import numpy as np
>>>
>>> tup1 = np.array([[ True, False, False, False],
... [ True, False, False, False],
... [False, False, False, False],
... [ True, True, False, False]], dtype=bool)
>>> for i in tup1:
... if not i.any():
... print i
...
[False False False False]
你只需要在每个子数组上调用 .all
,如果所有的值都是 False if not ele.all()
将评估为 True,如果有任何 True 值那么它将评估为 False。
import numpy as np
arr = np.array([[ True, False, False, False],
[ True, False, False, False],
[False, False, False, False],
[ True, True, False, False]], dtype=bool)
for ele in arr:
if not ele.all():
# all values are False
如果你想要每个单独的布尔值,你可以在数组上调用 .flat:
for ele in arr.flat:
if not ele:
.....
在某些时间使用更大的数组,使用 .flat
比使用两个 for 循环要快得多:
In [5]: %%timeit
for row in arr:
for item in row:
pass
...:
100 loops, best of 3: 4.13 ms per loop
In [6]: %%timeit
for ele in arr.flat:
pass
...:
1000 loops, best of 3: 231 µs per loop