Python 用numpy排序数组
我想更改中列元素的顺序Python 用numpy排序数组,python,sorting,numpy,lexicographic,Python,Sorting,Numpy,Lexicographic,我想更改中列元素的顺序 a = np.asarray( [[0,1,1,2,2,2,2,3,3,3,4,4,4,4,4,4], [4,0,3,0,1,2,5,1,2,5,3,4,6,6,7,7], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,1,0,0,0,1,1,0,1,0,1]] ) 基于第1-3行的值(基于0)。我的解决方案目前如下所示: a[:, a.transpose()[:, 1].argsort(axis=0)] arr
a = np.asarray(
[[0,1,1,2,2,2,2,3,3,3,4,4,4,4,4,4],
[4,0,3,0,1,2,5,1,2,5,3,4,6,6,7,7],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,1,0,0,0,1,1,0,1,0,1]]
)
基于第1-3行的值(基于0)。我的解决方案目前如下所示:
a[:, a.transpose()[:, 1].argsort(axis=0)]
array([[1, 2, 2, 3, 2, 3, 1, 4, 0, 4, 2, 3, 4, 4, 4, 4],
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1]])
这很好,只是我想在搜索中也包括第2-3行(按字典顺序)。理想情况下,我希望最后一行是[0,1,0,1,…,0,1]
(第二行满是零,但在本例中它包含相同的值)。您需要,这相当于argsort
,但基于多个排序键;给定多个数组,它将返回索引以按顺序对数组进行排序:
给定多个排序键,这些排序键可以解释为
电子表格,lexsort返回一个整数索引数组
按多列描述排序顺序。中的最后一个键
序列用于主排序顺序,即倒数第二个键
用于二级排序顺序,依此类推。keys参数必须是
可以转换为相同形状阵列的对象序列。
如果为keys参数提供了2D数组,则其行为
解释为排序键,并根据最后一个
第二排、最后一排等
棒极了-非常棒。谢谢
a[:0:-1]
用于什么(即为什么使用反向数组)?它是反向的,因为从概念上讲,关键重要性(哪个应该严格排序)和排序优先级(哪个应该首先排序)之间存在反向关系。最后排序的键是主键(严格排序)。您希望第二行成为主键,因此必须在所有三行的末尾对其进行排序。哦,正如您的报价所述,lexsort
似乎期望键的顺序(最后一个优先级最高)(“序列中的最后一个键用于主排序顺序,第二个到最后一个键用于次排序顺序,依此类推…”)。感谢您的澄清。
a[:, np.lexsort(a[:0:-1])]
#array([[2, 1, 3, 2, 3, 2, 1, 4, 0, 4, 3, 2, 4, 4, 4, 4],
# [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7],
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
# [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]])