Нужно провести ранжирование по среднему рангу нескольких рядов
На входе есть несколько рядов(размер не знаем, только количество) вводятся с клавиатуры. Нужно создать другой массив где будут отображены ранги исходного массива. Пример как считаются ранги: есть числа 1 2 3 3 5 4 4, сначала упорядочивание по возрастанию 1 2 3 3 4 4 5, затем присваиваются ранги 1 2 4,5 4,5 4 4 7. Ранжирование представляю как делать, а считывать с клавиатуры двумерный массив не получается
Ответы (1 шт):
Вы пишете, что представляете как делать ранжирование, а вместе с тем сам пример с ранжированием приводите как-то весьма странно, можно даже предположить, что с ошибкой. Каким образом вы присваиваете числам "3" ранговые значения "4.5", а числам "4" - ранговые значения "4"? При том, что во всех остальных случаях ранг значения повышается при увеличении самого этого значения (т.е. ранг тройки больше ранга двойки или ранг семерки больше ранга пятерки)
Если у вас есть ряд (уже отсортированный)
1 2 3 3 4 4 5
то ранги его элементов должны быть все таки такими:
1 2 3.5 3.5 5.5 5.5 7
Или если по семантике одинаковые ранги не допускаются, то такими:
1 2 3 4 5 6 7
А у вас получается какая-то непонятная смесь этих подходов. Уточните.
Это теория.
Учитывая предъявленный уровень "понимания", считаю не лишним показать, как можно получить указанные ранжировки исходя из начального массива [1, 2, 3, 3, 5, 4, 4].
Для первого варианта:
from scipy.stats import rankdata
array = np.array([1, 2, 3, 3, 5, 4, 4])
rankdata(array)
с результатом
array([1. , 2. , 3.5, 3.5, 7. , 5.5, 5.5])
Для второго варианта:
import numpy as np
array = np.array([1, 2, 3, 3, 5, 4, 4])
ranks = array.argsort().argsort()+1
print(ranks)
с результатом
[1 2 3 4 7 5 6]
Причем к этим задачам "считывание двумерного массива с клавиатуры" - абсолютно непонятно.