设x为NumPy数组。以下几点:
(x > 1) and (x < 3)
给出错误信息:
ValueError:包含多个元素的数组的真值为 模糊。使用a.any()或a.all()
我怎么解决这个问题?
设x为NumPy数组。以下几点:
(x > 1) and (x < 3)
给出错误信息:
ValueError:包含多个元素的数组的真值为 模糊。使用a.any()或a.all()
我怎么解决这个问题?
当前回答
最简单的答案是用“&”而不是“and”。
>>> import numpy as np
>>> arr = np.array([1, 4, 2, 7, 5])
>>> arr[(arr > 3) and (arr < 6)] # this will fail
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> arr[(arr > 3) & (arr < 6)] # this will succeed
array([4, 5])
其他回答
我也遇到了同样的问题(即多条件索引,这里是在某个日期范围内查找数据)。(a-b).any()或(a-b).all()似乎不起作用,至少对我来说是这样。
或者,我找到了另一个解决方案,它完美地满足了我想要的功能(当尝试索引数组时,具有多个元素的数组的真值是不明确的)。
与其使用上面建议的代码,不如使用:
numpy.logical_and(a, b)
对我来说,这个错误发生在测试中,代码错误如下:
pixels = []
self.pixels = numpy.arange(1, 10)
self.assertEqual(self.pixels, pixels)
这段代码返回:
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
因为我不能用列表断言numpy方法排列返回的对象。
解决方案是将numpy的排列对象转换为列表,我的选择是使用toList()方法,如下所示:
pixels = []
self.pixels = numpy.arange(1, 10).toList()
self.assertEqual(self.pixels, pixels)
这个类型化的错误消息还显示了当存在数组(例如bool或int类型)时执行if语句比较。请看例子:
... code snippet ...
if dataset == bool:
....
... code snippet ...
这个子句有dataset作为数组,bool是euhm的“打开的门”…对或错。
如果函数被包装在try-statement中,你将接收到带有except Exception的错误:没有error-type的消息:
具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
最简单的答案是用“&”而不是“and”。
>>> import numpy as np
>>> arr = np.array([1, 4, 2, 7, 5])
>>> arr[(arr > 3) and (arr < 6)] # this will fail
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> arr[(arr > 3) & (arr < 6)] # this will succeed
array([4, 5])
如果你与熊猫一起工作,为我解决的问题是,当我有NA值时,我试图做计算,解决方案是运行:
Df = Df .dropna()
在那之后,计算失败了。