设x为NumPy数组。以下几点:
(x > 1) and (x < 3)
给出错误信息:
ValueError:包含多个元素的数组的真值为 模糊。使用a.any()或a.all()
我怎么解决这个问题?
设x为NumPy数组。以下几点:
(x > 1) and (x < 3)
给出错误信息:
ValueError:包含多个元素的数组的真值为 模糊。使用a.any()或a.all()
我怎么解决这个问题?
当前回答
我也遇到了同样的问题(即多条件索引,这里是在某个日期范围内查找数据)。(a-b).any()或(a-b).all()似乎不起作用,至少对我来说是这样。
或者,我找到了另一个解决方案,它完美地满足了我想要的功能(当尝试索引数组时,具有多个元素的数组的真值是不明确的)。
与其使用上面建议的代码,不如使用:
numpy.logical_and(a, b)
其他回答
如果你与熊猫一起工作,为我解决的问题是,当我有NA值时,我试图做计算,解决方案是运行:
Df = Df .dropna()
在那之后,计算失败了。
如果a和b是布尔NumPy数组,&操作返回它们的元素:
a & b
返回一个布尔数组。要将其减少为一个布尔值,可以使用其中任何一个
(a & b).any()
or
(a & b).all()
注意:如果a和b是非布尔数组,请考虑(a - b).any()或(a - b).all()。
基本原理
NumPy开发人员认为,在布尔上下文中没有一种普遍理解的方法来计算数组:如果任何元素为True,它可能意味着True;如果所有元素都为True,它可能意味着True;如果数组长度非零,它可能意味着True,仅举三种可能性。
由于不同的用户可能有不同的需求和不同的假设,因此 NumPy开发人员拒绝猜测,而是决定在任何时候尝试在布尔上下文中计算数组时引发ValueError。对两个numpy数组应用和会导致这两个数组在布尔上下文中求值(通过在Python3中调用__bool__或在Python2中调用__nonzero__)。
通常,当比较两个单个数字时,Python常规代码可以正常工作,但在数组中,有一些数字(不止一个数字)应该并行处理。
例如,让我们假设如下:
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
你想检查b >= a: ?
因为,a和b不是个位数,你的意思是,如果b的每个元素都大于a中相似的数字,那么你应该使用以下命令:
if (b >= a).all():
print("b is greater than a!")
我也遇到了同样的问题(即多条件索引,这里是在某个日期范围内查找数据)。(a-b).any()或(a-b).all()似乎不起作用,至少对我来说是这样。
或者,我找到了另一个解决方案,它完美地满足了我想要的功能(当尝试索引数组时,具有多个元素的数组的真值是不明确的)。
与其使用上面建议的代码,不如使用:
numpy.logical_and(a, b)
这个类型化的错误消息还显示了当存在数组(例如bool或int类型)时执行if语句比较。请看例子:
... code snippet ...
if dataset == bool:
....
... code snippet ...
这个子句有dataset作为数组,bool是euhm的“打开的门”…对或错。
如果函数被包装在try-statement中,你将接收到带有except Exception的错误:没有error-type的消息:
具有多个元素的数组的真值是不明确的。使用a.any()或a.all()