7

次のような10進数のリストがあります。

[-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21]

範囲に収まるように、このリストを正規化する必要があります[-5,5]
どうすればPythonでそれを行うことができますか?

4

5 に答える 5

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]
于 2013-05-13T03:39:28.163 に答える
1
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]
于 2013-05-13T03:36:37.653 に答える
0

リストがソートされていると仮定します。

# Rough code
# Get the range of the list
r = float(l[-1] - l[0])
# Normalize
normal = map(lambda x: (x - l[0]) / r, l)

基本的に、リストのベースを別の範囲に調整します。これにより、元のリストが [0, 1] に正規化されます

于 2013-05-13T03:34:33.577 に答える
-4

複雑にしないでおく:

>>> 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]

さらに、結果を整数だけにしたい場合は、次のようにします。

>>> [int(i) for i in foo if int(i) in range(-5, 5)]
[-4, 2]
于 2013-05-13T04:04:57.013 に答える