按特定列对矩阵排序(包含2位数或更多)

2024-09-30 01:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想按numpy矩阵的第一列数字的顺序对其排序(该命令必须移动该列中每个元素的所有行),我尝试使用“argsort()”命令,但当数字大于9时,该命令不起作用,因为它仅适用于每个元素的第一位数字,例如对于以下numpy矩阵:你知道吗

1.1 ....... ........ .......
1.2 ....... ........ .......
1.3 ....... ........ .......
2.1 ....... ........ .......
2.2 ....... ........ .......
2.3 ....... ........ .......
3.1 ....... ........ .......
3.2 ....... ........ .......
3.3 ....... ........ .......
6.1 ....... ........ .......
6.2 ....... ........ .......
6.3 ....... ........ .......
8.1 ....... ........ .......
8.2 ....... ........ .......
8.3 ....... ........ .......
5.1 ....... ........ .......
5.2 ....... ........ .......
5.3 ....... ........ .......
4.1 ....... ........ .......
4.2 ....... ........ .......
4.3 ....... ........ .......
12.1 ....... ........ .......
12.2 ....... ........ .......
12.3 ....... ........ .......
11.1 ....... ........ .......
11.2 ....... ........ .......
11.3 ....... ........ .......
10.1 ....... ........ .......
10.2 ....... ........ .......
10.3 ....... ........ .......
9.1 ....... ........ .......
9.2 ....... ........ .......
9.3 ....... ........ .......
7.1 ....... ........ .......
7.2 ....... ........ .......

cjarray.sort=cjarray[cjarray[:, 0].argsort()]

1.1 ....... ........ ....... 
1.2 ....... ........ ....... 
1.3 ....... ........ ....... 
10.1 ....... ........ ....... 
10.2 ....... ........ ....... 
10.3 ....... ........ ....... 
11.1 ....... ........ ....... 
11.2 ....... ........ ....... 
11.3 ....... ........ ....... 
12.1 ....... ........ ....... 
12.2 ....... ........ ....... 
12.3 ....... ........ ....... 
2.1 ....... ........ ....... 
2.2 ....... ........ ....... 
2.3 ....... ........ ....... 
3.1 ....... ........ ....... 
3.2 ....... ........ ....... 
3.3 ....... ........ ....... 
4.1 ....... ........ ....... 
4.2 ....... ........ ....... 
4.3 ....... ........ ....... 
5.1 ....... ........ ....... 
5.2 ....... ........ ....... 
5.3 ....... ........ ....... 
6.1 ....... ........ ....... 
6.2 ....... ........ ....... 
6.3 ....... ........ ....... 
7.1 ....... ........ ....... 
7.2 ....... ........ ....... 
7.3 ....... ........ ....... 
8.1 ....... ........ ....... 
8.2 ....... ........ ....... 
8.3 ....... ........ ....... 
9.1 ....... ........ ....... 
9.2 ....... ........ ....... 

如您所见,矩阵从1.3跳到10.1,因为命令只涉及第一个数字,有人可以帮忙。你知道吗

非常感谢!你知道吗


Tags: 命令numpy元素排序顺序矩阵数字sort
2条回答

您应该argsort()只选择要对矩阵进行排序的列,并使用生成的索引对矩阵进行排序。演示:

>>> a=np.array([[12,2,3,4],[22,1,3,5],[4,1,6,7],[15,1,2,7]])
>>> a
array([[12,  2,  3,  4],
       [22,  1,  3,  5],
       [ 4,  1,  6,  7],
       [15,  1,  2,  7]])
>>> a[a[:,0].argsort()]
array([[ 4,  1,  6,  7],
       [12,  2,  3,  4],
       [15,  1,  2,  7],
       [22,  1,  3,  5]])

这是我很长一段时间用来仿真MATLAB的sortrows。Tbh.argsort似乎更有吸引力,应该可以很好地工作。几年前还没有。你知道吗

def sortrows(data):
    """assumes data to be numpy.ndarray"""
    data = np.ascontinuousarray(data)
    return np.sort(
        data.view(['', data.dtype] * data.shape[1]), axis=0
    ).view(data.dtype)

相关问题 更多 >

    热门问题