使用 a.any() 或 a.all()

2025-03-05 09:17:00
admin
原创
101
摘要:问题描述:x = np.arange(0,2,0.5) valeur = 2*x if valeur <= 0.6: print ("this works") else: print ("valeur is too high") 这是我收到...

问题描述:

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.anynumpy.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
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用