问题描述
在下面的这段代码中,我发现当我输入一个数字时它可以工作,但是当我输入 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
语句时,您必须传入一个 bool
。
if var:
pass
var
的类型必须为 bool
。
如果 x
是一个数字,那么 x%2 == 1
是一个 bool
。
如果 x
是一个 np.array
,那么 x%2 == 1
是一个 np.array
,它不是一个 bool
,而是一个 {{1} 的数组},其中每个单元格说明是否bool
。
您可以检查其中的所有元素是否都是 *that cell* %2 == 1
(1) 或者它们中的任何一个是带有 truthy
或 truthy
的 np.all
。
这是因为执行np.array([1,2,3,4])%2
时,输出也是np数组格式-array([1,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,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,4]))
以上代码的输出为1