Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Python 用numpy排序数组_Python_Sorting_Numpy_Lexicographic - Fatal编程技术网

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]])