Tôi muốn thay thế outliners từ một danh sách. Vì vậy, tôi xác định một ràng buộc trên và dưới. Bây giờ mọi giá trị trên upper_bound
và dưới lower_bound
được thay thế bằng giá trị bị ràng buộc. Cách tiếp cận của tôi là làm điều này trong hai bước bằng cách sử dụng một mảng numpy.Cách Pythonic để thay thế các giá trị danh sách với giới hạn trên và dưới (kẹp, cắt, đập)?
Bây giờ tôi tự hỏi liệu có thể thực hiện điều này trong một bước hay không, như tôi đoán nó có thể cải thiện hiệu suất và khả năng đọc.
Có cách nào ngắn hơn để thực hiện việc này không?
import numpy as np
lowerBound, upperBound = 3, 7
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[arr > upperBound] = upperBound
arr[arr < lowerBound] = lowerBound
# [3 3 3 3 4 5 6 7 7 7]
print(arr)
Mặc dù có một phương pháp 'clip' được biên dịch, nhưng không có gì không có ý nghĩa về mã của bạn. Đó là cách sử dụng 'numpy' hoàn hảo và chỉ có thể đọc được (đối với người dùng có kinh nghiệm). Giữ khái niệm đó trong hộp công cụ của bạn; nó hoạt động trong trường hợp không hoàn toàn phù hợp với mô hình 'clip'. – hpaulj
Hoạt động này thường được gọi là *** kẹp ***, *** cắt *** hoặc người khác *** dập nổi *** – smci
Bạn nên sử dụng phương thức 'clip' nhưng có một lý do khác hơn tốc độ; mã của bạn là thanh lịch nhưng tạo ra một mảng trung gian với 'arr> upperBound' có thể là một vấn đề nếu mảng lớn. –