数组降序排列_对数组进行排序&输出对应的索引值

3b1554acc408e3ba44746b02312234b0.png

目录

1 一维数组排序

-----1.1 升序排列

-----1.2 降序排列

-----1.3 含有相同元素的一维数组排序

-----1.4 使用 numpy.sort&numpy.argsort 是否会改变原数组

2 二维数组排序

-----2.1 行的升序排列

-----2.2 列的升序排列

-----2.3 行的降序排列

-----2.4 列的降序排列

-----2.5 含有相同元素的二维数组

-----2.6 使用 numpy.sort&numpy.argsort 是否会改变原数组

3 多维数组排序


1 一维数组排序

1.1 升序排列

import numpy as np

a = np.array([1, 7, 6, 12, 4, 3])
print(a)                            # 输出数组a
print(np.sort(a))                   # 输出升序排序后的a
print(np.argsort(a))                # 输出升序排序后对应的索引

运行,得到

[ 1  7  6 12  4  3]
[ 1  3  4  6  7 12]
[0 5 4 2 1 3]

1.2 降序排列

import numpy as np

a = np.array([1, 7, 6, 12, 4, 3])
print(a)                            # 输出数组a
print(-np.sort(-a))                 # 输出降序排序后的a
print(np.argsort(-a))               # 输出降序排序后对应的索引

运行,得到

[ 1  7  6 12  4  3]
[12  7  6  4  3  1]
[3 1 2 4 5 0]

1.3 含有相同元素的一维数组排序

import numpy as np

a = np.array([1, 7, 6, 6, 1, 7])
print(a)                            # 输出数组a
print(np.sort(a))                   # 输出升序排序后的a
print(np.argsort(a))                # 输出升序排序后对应的索引
print(-np.sort(-a))                 # 输出降序排序后的a
print(np.argsort(-a))               # 输出降序排序后对应的索引

运行,得到

[1 7 6 6 1 7]
[1 1 6 6 7 7]
[0 4 2 3 1 5]
[7 7 6 6 1 1]
[1 5 2 3 0 4]

通过排序后的索引可以看出,当一维数组含有相同元素时,无论是升序排列还是降序排列,相同元素之间的前后关系并没有变,即靠前的元素仍然在前面,靠后的元素仍然在后面。

1.4 使用numpy.sort&numpy.argsort是否会改变原数组

import numpy as np

a = np.array([1, 7, 6, 12, 4, 3])
print(a)                            # 输出数组a
print(np.sort(a))                   # 输出升序排序后的a
print(a)
print(np.argsort(a))                # 输出升序排序后对应的索引
print(a)

运行,得到

[ 1  7  6 12  4  3]
[ 1  3  4  6  7 12]
[ 1  7  6 12  4  3]
[0 5 4 2 1 3]
[ 1  7  6 12  4  3]

可以看出,使用numpy.sort&numpy.argsort不会改变原数组。

2 二维数组排序

2.1 行的升序排列

import numpy as np

a = np.array([[1, 7, 6],
              [2, 4, 8]])
print(a)                            # 输出数组a
print(np.sort(a, axis=1))           # 输出每行升序排序后的a
print(np.argsort(a, axis=1))        # 输出每行升序排序后对应的索引

运行,得到

[[1 7 6]
 [2 4 8]]
[[1 6 7]
 [2 4 8]]
[[0 2 1]
 [0 1 2]]

2.2 列的升序排列

import numpy as np

a = np.array([[1, 7, 6],
              [2, 4, 8]])
print(a)                            # 输出数组a
print(np.sort(a, axis=0))           # 输出每列升序排序后的a
print(np.argsort(a, axis=0))        # 输出每列升序排序后对应的索引

运行,得到

[[1 7 6]
 [2 4 8]]
[[1 4 6]
 [2 7 8]]
[[0 1 0]
 [1 0 1]]

2.3 行的降序排列

import numpy as np

a = np.array([[1, 7, 6],
              [2, 4, 8]])
print(a)                            # 输出数组a
print(-np.sort(-a, axis=1))         # 输出每行降序排序后的a
print(np.argsort(-a, axis=1))       # 输出每行降序排序后对应的索引

运行,得到

[[1 7 6]
 [2 4 8]]
[[7 6 1]
 [8 4 2]]
[[1 2 0]
 [2 1 0]]

2.4 列的降序排列

import numpy as np

a = np.array([[1, 7, 6],
              [2, 4, 8]])
print(a)                            # 输出数组a
print(-np.sort(-a, axis=0))         # 输出每列降序排序后的a
print(np.argsort(-a, axis=0))       # 输出每列降序排序后对应的索引

运行,得到

[[1 7 6]
 [2 4 8]]
[[2 7 8]
 [1 4 6]]
[[1 0 1]
 [0 1 0]]

2.5 含有相同元素的二维数组

import numpy as np

a = np.array([[1, 7, 1],
              [2, 4, 4]])
print(a)                            # 输出数组a
print(np.sort(a, axis=1))           # 输出每行升序排序后的a
print(np.argsort(a, axis=1))        # 输出每行升序排序后对应的索引

运行,得到

[[1 7 1]
 [2 4 4]]
[[1 1 7]
 [2 4 4]]
[[0 2 1]
 [0 1 2]]

当涉及含有相同元素的二维数组行的升序排列时,结论与一维数组一样,相同元素在比较轴(行排列时为行,列排列时为列)的相对位置不变。其余三种情况(含有相同元素的二维数组行的降序排列、含有相同元素的二维数组列的升序排列、含有相同元素的二维数组列的降序排列)也是一样。

2.6 使用numpy.sort&numpy.argsort是否会改变原数组

import numpy as np

a = np.array([[1, 9, 8],
              [2, 7, 6]])
print(a)                            # 输出数组a
print(np.sort(a, axis=1))           # 输出每行升序排序后的a
print(a)
print(np.argsort(a, axis=1))        # 输出每行升序排序后对应的索引
print(a)

运行,得到

[[1 9 8]
 [2 7 6]]
[[1 8 9]
 [2 6 7]]
[[1 9 8]
 [2 7 6]]
[[0 2 1]
 [0 2 1]]
[[1 9 8]
 [2 7 6]]

结论与一维数组相同,使用numpy.sort&numpy.argsort不会改变原数组。

3 多维数组排序

从一维数组和二维数组类推,相关结论不变。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值