scipy.stats.rankdata в обратном направлении, поддерживая связи и плавать - PullRequest
0 голосов
/ 09 января 2019

Я использую scipy rankdata для назначения рангов. Мне нужно поменять местами присвоенные ранги так, чтобы наибольшему числу был присвоен ранг 1. Пусть работает следующее, за исключением того, что оно не обрабатывает связи должным образом и возвращает int вместо числа с плавающей запятой. Я предполагаю, что это связано с циклом в rankdata, но не уверен, как еще добиться этого.

from scipy.stats import rankdata
arr = np.array([[10, 15, 19, 8, 8]])
rank = rankdata([-1 * i for i in arr]).astype(float)

Дан результат:

[3, 2, 1, 4, 4]

Ожидаемый результат:

[3., 2., 1., 4.5, 4.5]

1 Ответ

0 голосов
/ 09 января 2019

«Мне нужно поменять местами присвоенные ранги, чтобы наибольшему числу был присвоен ранг 1»

Это стандартное поведение rankdata.

«Пусть работает следующее, за исключением случаев, когда он неправильно обрабатывает связи»

Поведение в отношении связей обрабатывается главным образом через аргумент метода. См. Список примеров ниже ( source ):

>>> from scipy.stats import rankdata
>>> rankdata([0, 2, 3, 2])
array([ 1. ,  2.5,  4. ,  2.5])
>>> rankdata([0, 2, 3, 2], method='min')
array([ 1.,  2.,  4.,  2.])
>>> rankdata([0, 2, 3, 2], method='max')
array([ 1.,  3.,  4.,  3.])
>>> rankdata([0, 2, 3, 2], method='dense')
array([ 1.,  2.,  3.,  2.])
>>> rankdata([0, 2, 3, 2], method='ordinal')
array([ 1.,  2.,  4.,  3.])

"возвращает число вместо числа с плавающей точкой" Я не уверен, как ты это делаешь. Единственное, о чем я могу подумать, это примечание, указанное в документации: Примечания

Все типы с плавающей точкой преобразуются в numpy.float64 до рейтинг. Это может привести к ложным связям, если входной массив с плавающей точкой имеет более широкий тип данных, чем numpy.float64 (например, numpy.float128).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...