Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当第二个列表包含numpy数组时,根据python中的其他列表对列表进行排序不起作用_Python_Python 2.7_Sorting_Numpy - Fatal编程技术网

当第二个列表包含numpy数组时,根据python中的其他列表对列表进行排序不起作用

当第二个列表包含numpy数组时,根据python中的其他列表对列表进行排序不起作用,python,python-2.7,sorting,numpy,Python,Python 2.7,Sorting,Numpy,根据列表b对列表a进行排序的标准方法是将它们压缩在一起,然后使用sorted,如 sorted(zip(b,a)) 但是,如果b中的两个元素相等,它将自动继续尝试按照a进行排序,这有时会导致问题。例如考虑 import numpy as np a=[np.array([4,5]),np.array([3,4])] b=[1,1] e=zip(b,a) sorted(e) 这会导致错误 Traceback (most recent call last): File "<stdin>

根据列表b对列表a进行排序的标准方法是将它们压缩在一起,然后使用sorted,如

sorted(zip(b,a))
但是,如果b中的两个元素相等,它将自动继续尝试按照a进行排序,这有时会导致问题。例如考虑

import numpy as np
a=[np.array([4,5]),np.array([3,4])]
b=[1,1]
e=zip(b,a)
sorted(e)
这会导致错误

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()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
因此,当b中的两个元素相等时,它似乎按照a进行排序,但由于a包含numpy数组,排序算法在尝试比较它们时会发出抱怨


不管怎么说,这种行为是否符合预期?无论如何,我只想按b排序。如果两个元素相等,则顺序无关紧要。关于如何在不自己编写排序算法的情况下解决此问题,您有什么想法吗?

出现此错误是因为
numpy.array
在排序的意义上是不可比较的,即在比较两个数组时,它不会返回
True
False
值(而是另一个布尔数组),这与

如果您只想根据
b
进行排序,请为
排序提供一个键函数:

sorted(e, key=lambda x: x[0])
# [(1, array([4, 5])), (1, array([3, 4]))]

当在需要标量布尔值的上下文中使用布尔数组时(例如,
if
max
,或此处为标量排序),会出现此值错误。看看
1