编辑:问题已更新 - 我应该问:
为什么:
new_x = x[(0<x<10) & (20<x<40)]
给我&#34; ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()&#34;?
我发布的原始问题没有反映我遇到的问题(道歉 - 我的实际情况更复杂,而且我过于简化了)。原始问题如下:
我有一个numpy数组x,我想创建一个新的x元素数组 满足x> 0且x <10。我尝试了以下所有方法:
new_x = x[(x>0) and (x<10)] new_x = x[(x>0) & (x<10)] new_x = x[np.logical_and(x>0, x<10)] new_x = x[np.where(x>0, x<10)] new_x = x[np.all(x>0, x<10)] new_x = x[np.all((x>0) and (x<10))] new_x = x[np.all(x>0) and np.all(x<10)] new_x = x[np.any(x>0, x<10)]
并且他们都给出以下错误:
ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()
我已经没有想法了。我意识到这可能是一个重复的问题 但我已经咨询过了 this 和 this 还有许多其他没有帮助的东西,因为我不断得到同样的价值 错误。
编辑:修正拼写错误(x <0和x> 10) - &gt; (x> 0且x <10)
答案 0 :(得分:2)
我对逻辑陈述感到困惑。一个值如何小于0且大于10?
In [1]: import numpy as np
In [2]: x = np.arange(-10,20)
In [3]: x
Out[3]:
array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
In [5]: x[(x<0) & (x>10)]
Out[5]: array([], dtype=int64)
In [6]: x[(x<0) | (x>10)]
Out[6]:
array([-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 11, 12, 13,
14, 15, 16, 17, 18, 19])
答案 1 :(得分:0)
在第一个中用and
替换&
就行了。
答案 2 :(得分:0)
问题在于我使用x[(0<x<10) & (20<x<40)]
之类的条件(我应该从错误消息&#34中猜到;多个元素&#34;)并且通过使用分隔语句来解决它,即{{1 }}。