加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-12-09 11:02:27 所属栏目:PHP教程 来源:
导读:  目录

  1 一维数组排序

  -----1.1 升序排列

  -----1.2 降序排列

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

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

  
  目录
 
  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))        # 输出每列升序排序后对应的索引
  运行PHP数组排序,得到
 
  [[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 多维数组排序
 
  从一维数组和二维数组类推,相关结论不变。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!