У меня есть массив numpy следующим образом:
arr = np.array([0.166667, 0., 0., 0.333333, 0., 0.166667, 0.166667, np.nan]
I wi sh для ранжирования выше массива в порядке убывания, так что 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 и заполнил значение 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