我有两个纽比阵列。一个是N乘M,另一个是N乘1。我希望能够按M维中的任何一个对第一个列表进行排序,并且我希望列表保持相同的顺序(即,如果我交换了list1的第1行和第15行,我希望list2的第1行和第15行也交换)
例如:
import numpy as np
a = np.array([[1,6],[3,4],[2,5]])
b = np.array([[.5],[.8],[.2]])
然后,我希望能够按a
中每行的第一个元素进行排序,以给出:
或者按a
中每一行的第二个元素排序:
我看到很多类似的问题,其中两个列表都是一维的,比如这个question。或者关于列表排序的问题,例如this one。但我找不到我要找的东西。在
最终我得到了这样的结果:
import numpy as np
a = np.array([[1,6],[3,4],[2,5]])
b = np.array([[.5],[.8],[.2]])
package = zip(a,b)
print package[0][1]
sortedpackage= sorted(package, key=lambda dim: dim[0][1])
d,e = zip(*sortedpackage)
print d
print e
现在这就产生了我想要的d和e:
d = [[3,4],[2,5],[1,6]]
e = [[.8],[.2],[.5]
但我不明白为什么。print package[0][1]
给出了0.5——这不是我排序所依据的元素。为什么会这样?我所做的一切是否稳健?在
要对多个numpy数组应用相同的排序顺序,可以使用^{} 。例如,要按第二列排序:
输出:
^{pr2}$在您的
package
内:package[0]
是(a[0], b[0])
因此,package[0][1]
是b[0]。在您的包是三重嵌套的。
key=lambda dim : dim[0][1]
表示使用item[0][1]
作为键对package
进行排序。package
由item
组成,item
是双嵌套的。在要查看排序依据的元素,请使用
package[x][0][1]
x作为该项的索引print package[0][1]
返回0.5
的原因是它“作为一个整体”访问元组列表中的数字,而sorted
则查看给定iterable的每个单独元素。在您将}压缩到
a
和{package
:在这一点上你
print package[0][1]
。第一个元素是用package[0]
=([1, 6], [0.5])
获得的。下一个索引[1]
给出了第一个元组的第二个元素,因此得到了0.5
。在考虑到
sorted
,函数正在检查iterable的元素,单独地。它可能首先查看([1, 6], [0.5])
,然后([3, 4], [0.8])
,依此类推。在因此,当您使用
lambda
函数指定一个键时,对于iterable的这个特定元素,获得位于[0][1]
的值。也就是说,按给定元组的第一个元素的第二个值排序(a
的第二个值)。在相关问题 更多 >
编程相关推荐