2010-11-11 79 views

回答

21

使用的線性映射:

y = ((x/99.0) * 2) - 1 

工作原理:

  • 除以99:此歸一化範圍從[0,99]到[0,1]。
  • 乘以2:這會將範圍增加到[0,2]。
  • 減法1:這是給出[-1,1]的譯文。

如果您願意,您當然可以將步驟((x/99.0)* 2)合併爲一個分區。爲了清晰起見,我將它分開。

[a..b] 

向該範圍:

+1

這需要太多眯眼看什麼實際上打算;這種映射非常普遍,應該以一種可以立即理解的方式編寫。 – 2010-11-11 14:13:10

-1
n = (n/99) * 2 - 1; 
+2

在Python 2.x中,這需要'from __future__ import division'才能正常工作。或者像馬克·拜爾斯那樣使99浮動。 – 2010-11-11 13:43:48

6

要從該範圍映射的值x

[a'..b'] 

使用此公式:

x' = (x/99) * 2 - 1 

這樣的映射的工作方式如下:

x' = ((x - a)/(b - a)) * (b' - a') + a' 

一步一步:

  1. 您第一計算的多遠a..bx值是一個比:

    (x - a)/(b - a) 
    

    該值將介於0和1之間。

  2. 然後使用這個值來計算值應在多大程度上爲a'..b'是:

    ratio * (b' - a') + a' 
    

你的具體情況:

x' = ((x - 0)/(99 - 0)) * (1.0 - (-1.0)) + (-1.0) 

或承包形式:

x' = (x/99) * 2 - 1 

注意:如果你在一個編程語言,其中整數除以另一個整數得到的整數除法這樣做,你應該提倡值浮點以避免處理的精度損失:

x' = (x/99.0) * 2.0 - 1.0 
14

不要手動進行縮放;在數學上眯縫了眼睛以找出真正意圖的東西。使用助手功能。

def scale(val, src, dst): 
    """ 
    Scale the given value from the scale of src to the scale of dst. 
    """ 
    return ((val - src[0])/(src[1]-src[0])) * (dst[1]-dst[0]) + dst[0] 

print scale(0, (0.0, 99.0), (-1.0, +1.0)) 
print scale(1, (0.0, 99.0), (-1.0, +1.0)) 
print scale(99, (0.0, 99.0), (-1.0, +1.0)) 

我發現這是比較有用的功能,在任何語言中的一個;您可以一目瞭然地瞭解scale()調用的內容。

+0

我得到:TypeError:'int'/'float'對象不可下標。 :/ – 2018-01-05 16:01:29

2

將此用於任何範圍(也可以是負值)。

[minFrom..maxFrom] - > [minTo..maxTo]

mappedValue = minTo + (maxTo - minTo) * ((value - minFrom)/(maxFrom - minFrom)); 
2

使用numpy,這將是最有效的

>>> from numpy import interp 
>>> interp(50, [0,99], [-1,1]) 
0.010101010101010166