为什么我必须在此代码中使用 a.any() 或 a.all()?

Why do I have to use a.any() or a.all() in this code?

在下面的这段代码中,我发现当我输入一个数字时它可以工作,但是当我输入 ndarray 时它会 post 一条错误消息。
为什么在这种情况下我必须使用 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 语句时,您必须传入 bool.

if var:
   pass

var 必须是 bool.

类型

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

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

您可以检查其中的所有元素是否都是 truthy (1) 或者其中是否有任何元素是 truthy with np.all or np.any.

这是因为执行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