Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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/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/8/grails/5.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矩阵排序_Python_Sorting_Matrix_Numpy - Fatal编程技术网

通过一列进行Python矩阵排序

通过一列进行Python矩阵排序,python,sorting,matrix,numpy,Python,Sorting,Matrix,Numpy,我有一个nx2的整数矩阵。第一列是一个系列0,1,-1,2,-2,但是它们是按照从组成矩阵编译而来的顺序排列的。第二列是另一个列表中的索引列表 data[np.argsort(data[:, 0])] 我想通过第二列对矩阵进行排序。这相当于在Excel中选择两列数据,并通过B列进行排序(其中数据位于A列和B列)。请记住,每行第一列中的相邻数据应与其对应的第二列保持一致。我使用以下方法研究了解决方案: data[np.argsort(data[:, 0])] 但这似乎不起作用。所讨论的矩阵如下

我有一个nx2的整数矩阵。第一列是一个系列0,1,-1,2,-2,但是它们是按照从组成矩阵编译而来的顺序排列的。第二列是另一个列表中的索引列表

data[np.argsort(data[:, 0])]
我想通过第二列对矩阵进行排序。这相当于在Excel中选择两列数据,并通过B列进行排序(其中数据位于A列和B列)。请记住,每行第一列中的相邻数据应与其对应的第二列保持一致。我使用以下方法研究了解决方案:

data[np.argsort(data[:, 0])]
但这似乎不起作用。所讨论的矩阵如下所示:

data[np.argsort(data[:, 0])]
matrix([[1, 1],
        [1, 3],
        [1, 7],
        ..., 
        [2, 1021],
        [2, 1040],
        [2, 1052]])
您可以使用:

data[np.argsort(data[:, 0])]
lexsort(键,轴=-1)

data[np.argsort(data[:, 0])]
使用一系列键执行间接排序

data[np.argsort(data[:, 0])]
给定多个排序键,这些排序键可以解释为 电子表格,lexsort返回一个整数索引数组 按多列描述排序顺序

data[np.argsort(data[:, 0])]

注意:如果将多个键传递给
np.lexsort
,则最后一个键是主键。倒数第二个键是第二个键,依此类推

data[np.argsort(data[:, 0])]

如上所述,使用
np.lexsort
需要使用临时数组,因为
np.lexsort
不适用于numpy矩阵。自从
temp=data.view(np.ndarray)
创建一个视图,而不是数据的副本,它不需要太多额外的内存。但是,

data[np.argsort(data[:, 0])]
temp[np.lexsort((temp[:, 1], ))]
是一个新阵列,它确实需要更多内存

data[np.argsort(data[:, 0])]
还有一种方法可以按在位列进行排序。其思想是将数组视为具有两列的结构化数组。与普通Ndarray不同,结构化数组有一个
排序
方法,允许您将列指定为键:

data[np.argsort(data[:, 0])]
In [65]: data.dtype
Out[65]: dtype('int32')

In [66]: temp2 = data.ravel().view('int32, int32')

In [67]: temp2.sort(order = ['f1', 'f0'])
请注意,由于
temp2
数据的视图,因此它不需要分配新内存和复制阵列。此外,排序
temp2
同时修改
数据

data[np.argsort(data[:, 0])]
In [69]: data
Out[69]: 
matrix([[1, 0],
        [3, 2],
        [5, 4],
        [7, 6],
        [9, 8]])
您可以使用:

data[np.argsort(data[:, 0])]
lexsort(键,轴=-1)

data[np.argsort(data[:, 0])]
使用一系列键执行间接排序

data[np.argsort(data[:, 0])]
给定多个排序键,这些排序键可以解释为 电子表格,lexsort返回一个整数索引数组 按多列描述排序顺序

data[np.argsort(data[:, 0])]

注意:如果将多个键传递给
np.lexsort
,则最后一个键是主键。倒数第二个键是第二个键,依此类推

data[np.argsort(data[:, 0])]

如上所述,使用
np.lexsort
需要使用临时数组,因为
np.lexsort
不适用于numpy矩阵。自从
temp=data.view(np.ndarray)
创建一个视图,而不是数据的副本,它不需要太多额外的内存。但是,

data[np.argsort(data[:, 0])]
temp[np.lexsort((temp[:, 1], ))]
是一个新阵列,它确实需要更多内存

data[np.argsort(data[:, 0])]
还有一种方法可以按在位列进行排序。其思想是将数组视为具有两列的结构化数组。与普通Ndarray不同,结构化数组有一个
排序
方法,允许您将列指定为键:

data[np.argsort(data[:, 0])]
In [65]: data.dtype
Out[65]: dtype('int32')

In [66]: temp2 = data.ravel().view('int32, int32')

In [67]: temp2.sort(order = ['f1', 'f0'])
请注意,由于
temp2
数据的视图,因此它不需要分配新内存和复制阵列。此外,排序
temp2
同时修改
数据

data[np.argsort(data[:, 0])]
In [69]: data
Out[69]: 
matrix([[1, 0],
        [3, 2],
        [5, 4],
        [7, 6],
        [9, 8]])

你的想法是对的,只差几个字:

data[np.argsort(data[:, 0])]
>>> import numpy as np
>>> data = np.matrix([[9, 8],
...                   [7, 6],
...                   [5, 4],
...                   [3, 2],
...                   [1, 0]])
>>> data[np.argsort(data.A[:, 1])]
matrix([[1, 0],
        [3, 2],
        [5, 4],
        [7, 6],
        [9, 8]])

你的想法是对的,只差几个字:

data[np.argsort(data[:, 0])]
>>> import numpy as np
>>> data = np.matrix([[9, 8],
...                   [7, 6],
...                   [5, 4],
...                   [3, 2],
...                   [1, 0]])
>>> data[np.argsort(data.A[:, 1])]
matrix([[1, 0],
        [3, 2],
        [5, 4],
        [7, 6],
        [9, 8]])

谢谢堆@unutbu你的a星!我看第二个解决方案是最好的这一个正是我想要的:)再次感谢Hanks heaps@unutbu你的a星!我认为第二种解决方案是最好的,这正是我想要的:)再次感谢Hanks使用此方法@Bi Rico;)进行澄清感谢使用此方法@Bi Rico;)进行的澄清