Python numpy排名

在Python中使用NumPy庫進行排名是非常容易的。NumPy提供了一個叫做np.argsort()的方法來對數組進行排序,並返回一個排序後的索引數組。然後,你可以使用這個索引數組來獲取原始數組中每個元素的排名。

下面是一個簡單的例子:

import numpy as np

# 創建一個數組
arr = np.array([3, 5, 2, 9, 7])

# 使用argsort()方法獲取排序後的索引
sorted_indices = np.argsort(arr)

# 使用排序後的索引來獲取排名
rankings = np.empty(len(arr), dtype=int)
rankings[sorted_indices] = np.arange(1, len(arr) + 1)

print(rankings)

這段代碼首先創建了一個NumPy數組arr,然後使用np.argsort()方法對數組進行排序,並返回一個排序後的索引數組sorted_indices。最後,使用這個索引數組來創建一個新的數組rankings,其中每個元素是原始數組中對應元素的排名。

請注意,上面的代碼假設你想要的是每個元素在排序後的數組中的位置(即排名)。如果你想要的是元素在原始數組中的排名(即1-based ranking),那麼你需要在rankings數組上進行一些調整。例如,你可以使用以下代碼來獲取原始數組中的排名:

rankings = np.empty(len(arr), dtype=int)
rankings[sorted_indices] = np.arange(1, len(arr) + 1)

# 調整排名以適應原始數組
for i in range(len(arr)):
    if i < len(arr) - 1 and arr[i] == arr[i + 1]:
        rankings[i] += 1

這段代碼遍歷了arr數組,如果當前元素與下一個元素相等,那麼它將當前元素的排名加1。這樣可以確保每個元素在原始數組中的排名是唯一的。