Tôi có một danh sách các số thập phân như sau:
[-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21]
Tôi cần bình thường hóa danh sách này để phù hợp với phạm vi
old_min = min[input]
old_range = max[input] - old_min
0. Làm thế nào tôi có thể làm điều đó trong Python?How can I do it in python?
Burhan Khalid
165K18 Huy hiệu vàng238 Huy hiệu bạc276 Huy hiệu Đồng18 gold badges238 silver badges276 bronze badges
Khi được hỏi ngày 13 tháng 5 năm 2013 lúc 3:28May 13, 2013 at 3:28
1
Để có được phạm vi đầu vào rất dễ dàng:
old_min = min[input]
old_range = max[input] - old_min
Đây là phần khó khăn. Bạn có thể nhân với phạm vi mới và chia cho phạm vi cũ, nhưng gần như đảm bảo rằng thùng trên cùng sẽ chỉ nhận được một giá trị trong đó. Bạn cần mở rộng phạm vi đầu ra của mình để thùng trên cùng có cùng kích thước với tất cả các thùng khác.
new_min = -5
new_range = 5 + 0.9999999999 - new_min
output = [floor[[n - old_min] / old_range * new_range + new_min] for n in input]
Đã trả lời ngày 13 tháng 5 năm 2013 lúc 4:01May 13, 2013 at 4:01
Mark Ransommark RansomMark Ransom
292K40 Huy hiệu vàng384 Huy hiệu bạc610 Huy hiệu Đồng40 gold badges384 silver badges610 bronze badges
3
>>> L = [-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21]
>>> normal = map[lambda x, r=float[L[-1] - L[0]]: [[x - L[0]] / r]*10 - 5, L]
>>> normal
[-5.0, -2.5730337078651684, -4.348314606741574, -2.2584269662921352, -1.7865168539325844, -0.7303370786516856, 0.7303370786516847, 2.0786516853932575, 2.752808988764045, 3.6516853932584272, 4.101123595505618, 5.0]
Đã trả lời ngày 13 tháng 5 năm 2013 lúc 3:39May 13, 2013 at 3:39
John La Rooyjohn La RooyJohn La Rooy
Phù bằng vàng 287K5151 gold badges359 silver badges500 bronze badges
0
original_vals = [-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21 ]
# get max absolute value
original_max = max[[abs[val] for val in original_vals]]
# normalize to desired range size
new_range_val = 5
normalized_vals = [float[val]/original_max * new_range_val for val in original_vals]
Đã trả lời ngày 13 tháng 5 năm 2013 lúc 3:36May 13, 2013 at 3:36
2
Giả sử danh sách của bạn được sắp xếp:
# Rough code
# Get the range of the list
r = float[l[-1] - l[0]]
# Normalize
normal = map[lambda x: [x - l[0]] / r, l]
Về cơ bản, bạn muốn điều chỉnh cơ sở của danh sách thành một phạm vi khác. Điều này sẽ bình thường hóa danh sách ban đầu của bạn thành [0, 1]
Đã trả lời ngày 13 tháng 5 năm 2013 lúc 3:34May 13, 2013 at 3:34
MichaelmichaelMichael
2.13114 Huy hiệu bạc14 Huy hiệu đồng14 silver badges14 bronze badges
Giữ nó đơn giản:
>>> foo = [-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21]
>>> [i for i in foo if int[i] in range[-5, 5]]
[-4.5, 2]
Ngoài ra, nếu bạn muốn kết quả chỉ là số nguyên:
>>> [int[i] for i in foo if int[i] in range[-5, 5]]
[-4, 2]
Đã trả lời ngày 13 tháng 5 năm 2013 lúc 4:04May 13, 2013 at 4:04
Timsstimsstimss
9.7423 huy hiệu vàng33 Huy hiệu bạc55 Huy hiệu đồng3 gold badges33 silver badges55 bronze badges
1
$ \ beingroup $
Ví dụ: tôi có một danh sách [-518.8134, 480.1884,160.4761] Làm thế nào để bình thường hóa điều này thành phạm vi [-1 1]?
Đã hỏi ngày 13 tháng 3 năm 2021 lúc 20:04Mar 13, 2021 at 20:04
$ \ endgroup $
$ \ beingroup $
Ví dụ: tôi có một danh sách [-518.8134, 480.1884,160.4761] Làm thế nào để bình thường hóa điều này thành phạm vi [-1 1]?
data = [-518.8134, 480.1884, 160.4761]
# manual scaling
scaled = [-1 + 2 * [x - min[data]] / [max[data] - min[data]] for x in data]
print[scaled]
# [-1.0, 1.0, 0.3599364886029235]
# using scikit-learn's MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler[feature_range=[-1, 1]]
scaled = scaler.fit_transform[[[x] for x in data]]
print[scaled]
# [[-1. ]
# [ 1. ]
# [ 0.35993649]]
Đã hỏi ngày 13 tháng 3 năm 2021 lúc 20:04Mar 13, 2021 at 20:57
$ \ endgroup $Oxbowerce
Bạn có thể tự làm điều này hoặc sử dụng một thư viện như Scikit-learn có
1.2 gold badges7 silver badges22
bronze badgesold_min = min[input]
old_range = max[input] - old_min
$ \ endgroup $
$ \ beingroup $
Ví dụ: tôi có một danh sách [-518.8134, 480.1884,160.4761] Làm thế nào để bình thường hóa điều này thành phạm vi [-1 1]?
Đã hỏi ngày 13 tháng 3 năm 2021 lúc 20:04$L$ to range $[0, 1]$, you can do following :
import numpy as np
L = [L - np.min[L]]/[np.max[L] - np.min[L]]
$ \ endgroup $$L$ will give 0 and maximum will give 1. The rest will fall in between. Now you can transfer this to $[a, b]$ simply first by multiplying $[b-a]$ [which will shift everything to range $[0, b-a]$] and then adding $a$ [which will shift everything to $[a, b]$].
Bạn có thể tự làm điều này hoặc sử dụng một thư viện như Scikit-learn có
old_min = min[input]
old_range = max[input] - old_min
1.Mar 14, 2021 at 6:12
Đã trả lời ngày 13 tháng 3 năm 2021 lúc 20:57Deep
Oxbowerceoxbowerce1 bronze badge
$ \ endgroup $