【问题标题】:Why do I have to use a.any() or a.all() in this code?为什么我必须在这段代码中使用 a.any() 或 a.all() ?
【发布时间】:2021-03-14 02:16:19
【问题描述】:

在下面的这段代码中,我发现当我输入一个数字时它可以工作,但是当我输入 ndarray 时它会发布一条错误消息。
为什么在这种情况下我必须使用 a.any() 或 a.all()?

import numpy as np
def ht(x):
    if x%2 == 1:
        return 1
    else:
        return 0
ht(1)

[示例]
步骤(1):1
step(np.array([1,2,3,4])) :具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()

【问题讨论】:

  • 您到底希望发生什么?记住if 是python,一个简单的开关。没有暗示循环。

标签: numpy numpy-ndarray


【解决方案1】:

在评估if 语句时,您必须传入bool

if var:
   pass

var 必须是 bool 类型。

如果x 是一个数字,那么x%2 == 1 是一个bool

如果xnp.array,那么x%2 == 1np.array,它不是bool,而是bool 的数组,其中每个单元格都说明是否*that cell* %2 == 1

您可以使用np.allnp.any 来检查其中的所有元素是否为truthy (1) 或者它们是否为truthy

【讨论】:

    【解决方案2】:

    这是因为在执行np.array([1,2,3,4])%2 时,输出也是np 数组格式-array([1, 0, 1, 0])。要检查这些单独的数组元素是 1 还是 0,必须使用 any()all() 函数。当我们传递单个元素时没有问题。

    所以,这里是修改后的代码-

    import numpy as np
    def ht(x):
        
        if all(x%2 == 1): #denotes true when all modulus results are == 1
            return 1
        else:
            return 0
    ht(np.array([1,2,3,4]))
    

    上述代码的输出是0

    import numpy as np
    def ht(x):
        
        if any(x%2 == 1): #denotes true when any modulus result is == 1
            return 1
        else:
            return 0
    ht(np.array([1,2,3,4]))
    

    上述代码的输出是1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-01
      • 2021-08-28
      • 2017-07-21
      • 1970-01-01
      • 2018-05-24
      • 2020-08-10
      • 2016-12-14
      • 2011-09-03
      相关资源
      最近更新 更多