2 条题解

  • 0
    @ 2026-3-26 13:37:47

    NUMPY070 题解:计算每行元素的排名

    题目

    计算矩阵每行元素的排名(从小到大)。

    解题思路

    1. 读取矩阵
    2. 两次使用 .argsort\texttt{.argsort} 计算排名

    代码

    import numpy as np
    
    n = int(input())
    arr = np.array([list(map(int, input().split())) for _ in range(n)])
    rank = arr.argsort(axis=1).argsort(axis=1)
    print(rank)
    

    代码详解

    argsort 的原理

    .argsort\texttt{.argsort} 返回的是排序后的索引而不是值本身。

    两次 argsort 实现排名

    1. 第一次 .argsort\texttt{.argsort} —— 获取每行从小到大的索引
    2. 第二次 .argsort\texttt{.argsort} —— 对索引再次排序,得到排名

    示例解释

    对于数组 [3,1,2][3, 1, 2]

    • 排序后的索引:[1,2,0][1, 2, 0](即第 11 小是原数组第 11 个元素,第 22 小是原数组第 22 个元素,以此类推)
    • 再对索引排序:[2,0,1][2, 0, 1](即原数组第 00 个元素排第 22,原数组第 11 个元素排第 00,原数组第 22 个元素排第 11

    运行示例

    输入:

    3
    3 1 2
    2 3 1
    1 2 3
    

    输出:

    [[2 0 1]
     [1 2 0]
     [0 1 2]]
    

    分析:

    • 00[3,1,2][3, 1, 2]:最小是 11(排第 00),其次 22(排第 11),最大是 33(排第 22)→ [2,0,1][2, 0, 1]
    • 11[2,3,1][2, 3, 1]:最小是 11(排第 00),其次 22(排第 11),最大是 33(排第 22)→ [1,2,0][1, 2, 0]
    • 22[1,2,3][1, 2, 3]:本身就是升序 → [0,1,2][0, 1, 2]

    核心知识点

    1. .argsort\texttt{.argsort} —— 返回排序索引
    2. 两次 argsort\texttt{argsort} 实现排名
    3. axis=1\texttt{axis=1} —— 按行操作
    • 0
      @ 2026-3-26 13:21:30

      NUMPY070 题解:行排序

      题目

      计算矩阵每行元素的排名。

      解题思路

      1. 读取矩阵
      2. 两次使用 .argsort\texttt{.argsort} 计算排名

      代码

      import numpy as np
      
      n = int(input())
      arr = np.array([list(map(int, input().split())) for _ in range(n)])
      rank = arr.argsort(axis=1).argsort(axis=1)
      print(rank)
      

      代码详解

      • 第一次 .argsort\texttt{.argsort} —— 获取每行从小到大的索引
      • 第二次 .argsort\texttt{.argsort} —— 对索引再次排序,得到排名
      • 1

      信息

      ID
      348
      时间
      1000ms
      内存
      256MiB
      难度
      (无)
      标签
      (无)
      递交数
      0
      已通过
      0
      上传者