Đây là một chút hack, nhưng nếu mảng của bạn chỉ chứa số nguyên bạn có thể thêm giá trị ngẫu nhiên và argsort kết quả. np.random.rand
cung cấp cho bạn kết quả trong [0, 1)
vì vậy trong trường hợp này, bạn được đảm bảo duy trì thứ tự cho các phần tử không giống hệt nhau.
>>> import numpy as np
>>> arr = np.array([0,3,1,1,1])
>>> np.argsort(arr + np.random.rand(*arr.shape))
array([0, 4, 3, 2, 1])
>>> np.argsort(arr + np.random.rand(*arr.shape))
array([0, 3, 4, 2, 1])
>>> np.argsort(arr + np.random.rand(*arr.shape))
array([0, 3, 4, 2, 1])
>>> np.argsort(arr + np.random.rand(*arr.shape))
array([0, 2, 3, 4, 1])
>>> np.argsort(arr + np.random.rand(*arr.shape))
array([0, 2, 3, 4, 1])
>>> np.argsort(arr + np.random.rand(*arr.shape))
array([0, 4, 2, 3, 1])
đây chúng ta thấy chỉ số 0
luôn là đầu tiên trong argsort
kết quả và chỉ số 1
là cuối cùng, nhưng phần còn lại của các kết quả đang ở trong một thứ tự ngẫu nhiên.
Nói chung, bạn có thể tạo ra các giá trị ngẫu nhiên bị ràng buộc bởi np.diff(np.sort(arr)).max()
, nhưng bạn có thể gặp sự cố chính xác tại một số điểm.
Không phải là nó quá lớn một giả định để đảm nhận các vectơ chỉ chứa số nguyên? –
Vâng, tôi không biết. Tôi đã đi vào những gì đã được đưa ra trong câu hỏi và nó được thừa nhận trong câu trả lời của tôi. Giải pháp của bạn là gọn gàng mặc dù. – YXD