min函数引发ValueError异常

时间:2014-07-07 16:48:49

标签: python python-2.7 numpy

我正在尝试使用Python 2.7.3中的内置函数 min ,并将以下列表作为输入:

[[-33.183271201814613, np.array([ 1.77657872, -1.68957646,  1.65703474])],
 [-31.719166135222533, np.array([ 2.02657872, -1.68957646,  1.65703474])],
 [-33.507228111267317, np.array([ 1.52657872, -1.68957646,  1.65703474])],
 [-33.507228111267317, np.array([ 1.77657872, -1.43957646,  1.65703474])],
 [-32.038950989011688, np.array([ 1.77657872, -1.93957646,  1.65703474])],
 [-32.038950989011688, np.array([ 1.77657872, -1.68957646,  1.90703474])],
 [-31.815205800468107, np.array([ 1.77657872, -1.68957646,  1.40703474])]]

问题是我得到了这个 ValueError 异常。这很奇怪,因为 min 以与此相同的形式在其他数组上工作,但是这组特殊的数值会导致错误。完整的例外:

  

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

为什么会这样?它可能是这个版本的Python中的错误吗?

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为Python按字典顺序对列表进行排序。这意味着当第一个键存在平局时,将检查第二个键。在你的情况下,第二个键对应于numpy数组,这意味着在预期单个布尔值的情况下返回布尔数组,从而引发ValueError。如果删除第一个键的关系,问题就会消失:

In [5]:

l = [[-33.183271201814613, np.array([ 1.77657872, -1.68957646,  1.65703474])],
 [-31.719166135222533, np.array([ 2.02657872, -1.68957646,  1.65703474])],
 #[-33.507228111267317, np.array([ 1.52657872, -1.68957646,  1.65703474])],
 [-33.507228111267317, np.array([ 1.77657872, -1.43957646,  1.65703474])],
 #[-32.038950989011688, np.array([ 1.77657872, -1.93957646,  1.65703474])],
 [-32.038950989011688, np.array([ 1.77657872, -1.68957646,  1.90703474])],
 [-31.815205800468107, np.array([ 1.77657872, -1.68957646,  1.40703474])]]
In [6]:

min(l)
Out[6]:
[-33.50722811126732, array([ 1.77657872, -1.43957646,  1.65703474])]

答案 1 :(得分:0)

解决了它,问题是我需要一个键才能使用第一个元素对数组进行排序。而不是使用min(x),需要使用min(x,key = lambda i:i [0])。