2014-09-11 17 views
5

Về cơ bản, tôi có một mảng có thể thay đổi giữa hai số bất kỳ và tôi muốn bảo toàn phân phối trong khi ràng buộc nó với không gian [0,1]. Chức năng làm điều này rất đơn giản. Tôi thường viết nó như:Mảng NumPy bị giới hạn bởi 0 và 1?

def to01(array): 
    array -= array.min() 
    array /= array.max() 
    return array 

Tất nhiên nó có thể và nên phức tạp hơn để giải thích cho tình huống tấn, chẳng hạn như tất cả các giá trị là như nhau (chia cho số không) và nổi vs phân chia số nguyên (sử dụng np.subtract và np.divide thay vì các toán tử). Nhưng đây là cơ bản nhất.

Vấn đề là tôi làm điều này rất thường xuyên trên các công cụ trong dự án của tôi, và nó có vẻ giống như một hoạt động toán học khá chuẩn. Có một chức năng được xây dựng trong đó thực hiện điều này trong NumPy?

+0

Tôi là một chút bối rối bởi vì nếu bạn bình thường hóa một mảng ints giữa 0 và 1 bạn sẽ chỉ có một mảng các số không và một. Có nghĩa là bạn sẽ mất rất nhiều thông tin phân phối. – BKay

+0

bạn đã xem qua các tài liệu chưa? – wwii

+1

@ user3557216 này trông khá hiệu quả, nhưng tôi sẽ thay đổi 'mảng' thành tên khác để tránh làm đổ bóng hàm' np.array() '... –

Trả lời

1

Không biết nếu có tích hợp cho điều đó (có thể không, nó không thực sự là một điều khó khăn để làm như là). Bạn có thể sử dụng vectorize để áp dụng một chức năng để tất cả các yếu tố của mảng:

def to01(array): 
    a = array.min() 
    # ignore the Runtime Warning 
    with numpy.errstate(divide='ignore'): 
     b = 1. /(array.max() - array.min()) 
    if not(numpy.isfinite(b)): 
     b = 0 
    return numpy.vectorize(lambda x: b * (x - a))(array) 
+0

Vâng tôi có một chức năng làm điều này. Đó là một chút thích hợp, và có lẽ là trách nhiệm của các colormapper hơn so với thu thập dữ liệu, vì vậy tôi đoán điều này sẽ làm. – user3557216

Các vấn đề liên quan