使用 a.any() 或 a.all()
- 2025-03-05 09:17:00
- admin 原创
- 102
问题描述:
x = np.arange(0,2,0.5)
valeur = 2*x
if valeur <= 0.6:
print ("this works")
else:
print ("valeur is too high")
这是我收到的错误:
if valeur <= 0.6:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我读过几篇关于 a.any() 或 a.all() 的帖子,但仍然找不到真正清楚解释如何修复该问题的方法。我知道为什么 Python 不喜欢我写的内容,但我不知道如何修复它。
解决方案 1:
如果你看一下的结果valeur <= 0.6
,你就会明白是什么导致了这种歧义:
>>> valeur <= 0.6
array([ True, False, False, False], dtype=bool)
因此结果是另一个数组,在本例中它有 4 个布尔值。现在结果应该是什么?当一个值为真时条件应该为真吗?只有当所有值都为真时条件才为真吗?
这正是numpy.any
和numpy.all
所做的。前者要求至少一个真值,后者要求所有值都为真:
>>> np.any(valeur <= 0.6)
True
>>> np.all(valeur <= 0.6)
False
解决方案 2:
还有一种方法可以实现这一点
import numpy as np
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
c = np.array([1,2,3,4])
print((a == b ).all()) #False
print((a == c ).all()) # True
print((a == b ).any()) #False
print((a == c ).any()) #True
print((a > 3 ).all()) #False
解决方案 3:
你评论:
valeur 是一个等于 [ 0. 1. 2. 3.] 的向量。我对每个单独的项都感兴趣。对于 0.6 以下的部分,则返回“这有效”...
如果您对每个术语都感兴趣,那么请编写代码来处理每个术语。例如。
for b in valeur<=0.6:
if b:
print ("this works")
else:
print ("valeur is too high")
这将写入 2 行。
numpy
当您尝试在需要单个标量值的上下文中使用代码时,代码 会产生错误。if b:...
只能做一件事。它本身不会遍历每个元素并b
为每个元素执行不同的操作。
您还可以将该迭代转换为列表理解,例如
['yes' if b else 'no' for b in np.array([True, False, True])]
解决方案 4:
import numpy as np
x = np.arange(0,2,0.5)
valeur = 2*x
print(valeur <= 0.6)
'''# [ True False False False] due to this "if statement" cannot decide if the
value is true or false
#This is where you got ValueError of ambiguity
#This error recomended you to use a.any() or a.all() built-in functions
#a.any() :- any True is True i.e. ([ True False False False].any) will be
True/1
#a.all() :- all Ture is Ture i.e. ([ True False False False].all) will be
False/0'''
if valeur.all() <= 0.6:
'''# Now in "if statement" valeur.all() is Flase/0
# so is 0 <= 0.6?
# Ture right? '''
print ("this works")
'''# This is the reason "this works"'''
else:
print ("valeur is too high")
解决方案 5:
这也应该有效,并且更接近于问题中所问的答案:
for i in range(len(x)):
if valeur.item(i) <= 0.6:
print ("this works")
else:
print ("valeur is too high")
解决方案 6:
如果你想对每个元素做一些事情:
使用 numpy 的函数
import numpy as np
def temp(x):
if x <= 0.6:
print ("this works")
else:
print ("valeur is too high")
arr = np.arange(0,1,0.1)
np.vectorize(temp)(arr)
解决方案 7:
对于这种特定模式(如果元素满足某个条件,则将它们映射到一个值,否则将它们映射到另一个值),您可以使用np.where()
:
import numpy as np
x = np.arange(0,2,0.5)
valeur = 2*x
print(*np.where(2 * x <= 0.6, "this works", "valeur is too high"), sep='
')
输出:
this works
valeur is too high
valeur is too high
valeur is too high
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD