Numpy值错误 - 具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

时间:2017-12-07 20:12:41

标签: python arrays numpy

编辑:问题已更新 - 我应该问:

为什么:

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)

3 个答案:

答案 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 }}。