gpt4 book ai didi

python - 根据重复顺序索引 numpy 数组

转载 作者:行者123 更新时间:2023-12-04 04:19:26 26 4
gpt4 key购买 nike

我有一个如下所示的 numpy 数组,

arr = np.array([0.166667, 0., 0., 0.333333, 0., 0.166667, 0.166667, np.nan]

我希望按降序排列在数组上方,这样 highest value 得到 1。并且 np.nan 得到最后一个值,但在值重复期间不增加排名!

期望:

ranks = [2, 3, 3, 1, 3, 2, 2, 4]

i.e.
>>>>
1 0.333333
2 0.166667
2 0.166667
2 0.166667
3 0.0
3 0.0
3 0.0
4 -inf

我目前所取得的成就如下,

我使用了两次 np.argsort 并用尽可能低的 float 填充了 np.nan 值,但即使使用相同的值,排名也会增加!

# The Logic
arr = np.nan_to_num(arr, nan=float('-inf'))
ranks = list(np.argsort(np.argsort(arr)[::-1]) + 1)

# Pretty Print
sorted_ = sorted([(r, a) for a, r, in zip(arr, ranks)], key=lambda v: v[0])
for r, a in sorted_:
print(r, a)

>>>>
1 0.333333
2 0.166667
3 0.166667
4 0.166667
5 0.0
6 0.0
7 0.0
8 -inf

关于如何在没有增量的情况下管理队伍有什么想法吗?

https://repl.it/@MilindDalvi/MidnightblueUnselfishCategories

最佳答案

这是使用 DataFrame.rank 设置 method="min"na_option ='bottom' 的 pandas 方法:

s = pd.Series(arr).rank(method="min", na_option ='bottom', ascending=False)
u = np.sort(s.unique())
s.map(dict(zip(u, range(len(u))))).add(1).values
# array([2, 3, 3, 1, 3, 2, 2, 4], dtype=int64)

关于python - 根据重复顺序索引 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com