tôi cần phải bình thường hóa một vector của N số nguyên sao cho:Tôi nên chuẩn hóa một véc-tơ trong Matlab ở đâu tổng là 1?
- Mỗi giá trị tỷ lệ với giá trị ban đầu của nó (giá trị sẽ nằm giữa 0 và 1)
- Tổng của tất cả các giá trị là = 1
Ví dụ:
Nếu tôi có một vector
V = [2,2,1,0]
vector bình thường nên cần phải:
V_norm = [0.4,0.4,0.2,0] % 0.4+0.4+0.2 = 1
Tôi đã thử với nhiều giải pháp được tìm thấy trong cộng đồng này và trên web và cuối cùng tôi đã làm nó với mã này:
part = norm(V);
if part > 0
V_norm = V/part;
else % part = 0 --> avoid "divide by 0"
V_norm = part;
end
Vấn đề làm việc này nếu :
- tất cả các yếu tố của mảng là "0" -> mảng kết quả không thay đổi
- chỉ có một yếu tố của ARRA y là> 0 và tất cả các phần tử khác là = 0 -> mảng kết quả: phần tử> 0 là 1 và phần tử khác 0
nhưng nếu tôi có trường hợp khác, mặc dù kết quả tỷ lệ thuận, tổng là không 0. Ví dụ:
V = [1,0,1]
V_norm = [0.74,0,0.74]
V = [1,1,1]
V_norm = [0.54,0.54,0.54]
(tôi không chắc chắn nếu số lượng là chính xác bởi vì tôi không thể sử dụng Matlab ngay bây giờ nhưng tôi chắc chắn số tiền là> 1)
ahy dấu?
Cảm ơn bạn trước
Là một bên lề, 'sum (v)' không thể tính toán như một [chuẩn] (http://en.wikipedia.org/wiki/Norm_ (toán học)) vì nó có thể mang lại giá trị âm. –
Không đáp ứng yêu cầu của tất cả các giá trị nằm trong khoảng từ 0 đến 1 (xem xét các yếu tố âm). – Tobold
Tôi đồng ý. Tôi không nên sử dụng "bình thường hóa" thay vì "chuẩn mực", cũng như OP. Tôi sẽ chỉnh sửa câu trả lời của tôi cho phù hợp. – Deve