Tôi đang tìm một cách hiệu quả để tính toán vectơ xếp hạng của một danh sách bằng Python, tương tự như hàm rank
của R. Trong một danh sách đơn giản không có mối quan hệ giữa các yếu tố, yếu tố i của vector hạng của một danh sách l
nên x khi và chỉ khi l[i]
là yếu tố -thứ x trong danh sách được sắp xếp. Đây là đơn giản cho đến nay, đoạn mã sau hiện các trick:Phương pháp hiệu quả để tính toán vectơ xếp hạng của một danh sách trong Python
def rank_simple(vector):
return sorted(range(len(vector)), key=vector.__getitem__)
Mọi thứ trở nên phức tạp, tuy nhiên, nếu danh sách ban đầu có quan hệ (ví dụ: nhiều yếu tố với cùng giá trị). Trong trường hợp đó, tất cả các phần tử có cùng giá trị phải có cùng một thứ hạng, đó là mức trung bình của các cấp bậc của chúng thu được bằng cách sử dụng phương pháp ngây thơ ở trên. Vì vậy, ví dụ, nếu tôi có [1, 2, 3, 3, 3, 4, 5]
, thứ hạng ngây thơ cho tôi [0, 1, 2, 3, 4, 5, 6]
, nhưng những gì tôi muốn có là [0, 1, 3, 3, 3, 5, 6]
. Cái nào sẽ là cách hiệu quả nhất để làm điều này trong Python?
Lưu ý: Tôi không biết liệu NumPy đã có phương pháp để đạt được điều này hay chưa; nếu có, xin vui lòng cho tôi biết, nhưng tôi sẽ được quan tâm đến một giải pháp Python tinh khiết anyway như tôi đang phát triển một công cụ mà nên làm việc mà không có NumPy là tốt.
bạn đã kiểm tra 'numpy.argsort (vector)' chưa? –