2016-12-05 3 views
-2

Я написал функцию R, которая принимает вектор в качестве входного сигнала и возвращает в качестве вывода другой вектор, так что минимум входного вектора заменяется на 1, элемент который больше минимального, заменяется на 2 и т. д. до максимума вектора, который заменяется длиной вектора. Это моя функция:Переупорядочить элементы вектора от 1 до длины вектора

resc<-function(x){ 
    m<-length(unique(x)) 
    nor<-rep(0,length(x)) 
    x_2<-x 
    for(i in 1:m){ 
    temp<-min(x_2) 
    temp_2<-which(x==temp) 
    nor[temp_2]<-i 
    x_2<-x_2[-which(x_2==temp)] 
    } 
    return(nor) 
} 

Как можно переписать эту функцию в Python? Я попытался, но я был немного смущен использованием команды «which».

+4

Для чего это стоит, что функция уже существует в R, и это 'rank'. Не знаю, что такое python, чтобы рассказать, как это сделать. – nicola

+1

Для R вы можете использовать 'rank', который дает вам ранг этого элемента в векторе и для python, возможно, [Ранжирование элементов в массиве с использованием Python/NumPy] (http://stackoverflow.com/questions/5284646/rank -items-in-a-array-using-python-numpy) –

+1

Спасибо вам за интуицию на языке R @nicola и @Ronak! Я думаю, что это то, что я ищу! –

ответ

1

Как сказал Ронак и Никола, все, что вам нужно, это функция rank, чтобы получить тот же результат.

В Python, я хотел бы попробовать:

import scipy.stats as ss 
ss.rankdata([array]) 
Смежные вопросы