2016-03-15 41 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)))