2016-03-15 78 views
1

this question類似,我想將Numpy數組放入一定範圍,但與鏈接問題不同,我不想對它進行標準化。我怎樣纔能有效地做到這一點? Numpy中是否有內置的方法?Scale Numpy array to certain range

res = my_scale(np.array([-3, -2, -1], dtype=np.float), out_range) 
assert res == [-1, 0, 1] 
assert res != [-1, -2/3, -1/3] 

回答

2

我做了基於關閉的D3.js代碼this answer我自己的函數:

爲了用一個例子,其中my_scale是我要找的功能和out_range定義輸出範圍明確

import numpy as np 

def d3_scale(dat, out_range=(-1, 1)): 
    domain = [np.min(dat, axis=0), np.max(dat, axis=0)] 

    def interp(x): 
     return out_range[0] * (1.0 - x) + out_range[1] * x 

    def uninterp(x): 
     b = 0 
     if (domain[1] - domain[0]) != 0: 
      b = domain[1] - domain[0] 
     else: 
      b = 1.0/domain[1] 
     return (x - domain[0])/b 

    return interp(uninterp(dat)) 

print(d3_scale(np.array([-2, 0, 2], dtype=np.float))) 
print(d3_scale(np.array([-3, -2, -1], dtype=np.float)))