python numpy排序后輸出排名
問題:
假設某班的成績為:
姓名 | 成績 | 名次 |
---|---|---|
小紅 | 95 | |
小黑 | 67 | |
小白 | 58 | |
小綠 | 82 | |
小藍 | 76 | |
小橙 | 79 | |
小可愛 | 99 |
請根據表格,輸出對應的名次
程序:
numpy.argsort(a, axis=-1, kind=’quicksort’, order=None)
功能: 將矩陣a按照axis排序,並返回排序后的下標
參數: a:輸入矩陣, axis:需要排序的維度
返回值: 輸出排序后的下標
編寫python程序如下,使用兩次np.argsort()
即可解決問題
import numpy as np
grade = np.array([95,67,59,82,76,79,99]) # 源數據
index = np.argsort(-grade) # 排序后的索引(負號為降序排列)
rank = np.argsort(index) # 名次
print(rank + 1)
輸出:
Out[24]:array([2, 6, 7, 3, 5, 4, 1], dtype=int64)
補全表格即可:
姓名 | 成績 | 名次 |
---|---|---|
小紅 | 95 | 2 |
小黑 | 67 | 6 |
小白 | 58 | 7 |
小綠 | 82 | 3 |
小藍 | 76 | 5 |
小橙 | 79 | 4 |
小可愛 | 99 | 1 |