我正在尝试使用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中的错误吗?
答案 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])。