Python如果条件不满足,则输入脚本。Numpy any()和all()问题

Python如果条件不满足,则输入脚本。Numpy any()和all()问题,python,arrays,numpy,if-statement,Python,Arrays,Numpy,If Statement,我有启动if的条件,我认为它是在出乎意料的情况下启动的,也许你们中的一位可以告诉我我的错误或建议一个更好的方法 这是脚本的一部分: 我获取一些角度的值,并将它们分配给T2,然后在某个点进行比较 ... if 0 <= np.any(T2[i:]) < 0.5*np.pi: Do something 分配给数组的值从哪里来?你如何避免这种情况? 是否有其他方法可以对数组执行条件语句?这根本不是Python的工作方式: if 0 <= np.any(T2[i:]) < 0

我有启动if的条件,我认为它是在出乎意料的情况下启动的,也许你们中的一位可以告诉我我的错误或建议一个更好的方法

这是脚本的一部分:

我获取一些角度的值,并将它们分配给T2,然后在某个点进行比较

...
if 0 <= np.any(T2[i:]) < 0.5*np.pi:
 Do something
分配给数组的值从哪里来?你如何避免这种情况?
是否有其他方法可以对数组执行条件语句?

这根本不是Python的工作方式:

if 0 <= np.any(T2[i:]) < 0.5*np.pi:
现在,当与数值比较时,True被转换为1。所以,你的总体陈述与

if 1 < 0.5*np.pi:

老实说,我也猜不到你的意思。

从文档中,np.any[-1,0,5]返回True。因此,您基本上是将True与0和0.5*np.pi进行比较,这会导致条件为True。

正如其他答案中所指出的,如果不使用axis参数,np.any和np.all会将数组缩减为单个bool

它实际上告诉您数组中的任何或所有值是否与条件boolvalue==True匹配


实际上,您要做的是计算T2中的任何值是否与0匹配。请尝试np.anyT2[0这很快:D,它实际上像预期的那样工作;请解释如何工作。任何工作。谢谢@Fabienp刚刚发布了一个答案来解释。好的,非常有用,谢谢你的快速回答。我试图确定数组中的任何角度是否在0和PI/2之间,但我猜我完全错了。如果有np.logical_和0,或者如果有T2,也很优雅[i::==np.clipT2[i:],0,0.5*np.pi:哇,太简单了!非常感谢您的帮助,我从未使用过.clip或.any。您为我节省了数小时的研究/编写时间。非常感谢您的解释。我发现的唯一问题是,如果数组中的一个值在两种情况下都是真的,那么它最终会变成真的,因为0@JVargas,是的,这是预期的行为,那就是值将在间隔0内
In [27]: np.degrees(np.all(T2[i:]))
Out[27]: 57.281
if 0 <= np.any(T2[i:]) < 0.5*np.pi:
if ( 0 <= np.any(T2[i:]) ) < 0.5*np.pi
                  first
           ~~ second ~~
     ~~~~~~ third ~~~~~~
                             ~ fourth ~
    ~~~~~~~~~~~~~~~~~~~~~ fifth ~~~~~~
if True < 0.5*np.pi:
if 1 < 0.5*np.pi:
0 <= np.any(T2[i:]) < 0.5*np.pi
In [7]: T2                                       # Your array
Out[7]:
array([ 1.84103563,  2.68108542,  2.73258615,  2.7358088 ,  2.76608758,
        2.8106091 ])

In [8]: (0 <= T2)                                # First condition
Out[8]: array([ True,  True,  True,  True,  True,  True], dtype=bool)

In [9]: (T2 < 0.5 * np.pi)                       # Second condition
Out[9]: array([False, False, False, False, False, False], dtype=bool)

In [10]: (0 <= T2) & (T2 < 0.5 * np.pi)          # Combination of the conditions
Out[10]: array([False, False, False, False, False, False], dtype=bool)

In [11]: np.any((0 <= T2) & (T2 < 0.5 * np.pi))  # Use `any` of the combination
Out[11]: False