Sea*_*123 6 python arrays numpy
与此问题类似,我想将Numpy数组放入某个范围,但与链接问题不同,我不想将其标准化.我怎样才能有效地做到这一点?Numpy有内置方法吗?
为了澄清一个例子,my_scale我正在寻找的函数在哪里并out_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]
Run Code Online (Sandbox Code Playgroud)
在询问CodeReview后,我被告知有一个内置功能np.interp可以实现这一点:
np.interp(a, (a.min(), a.max()), (-1, +1))
Run Code Online (Sandbox Code Playgroud)
为了后代,我在下面留下了我的旧答案.
我根据这个答案中的D3.js代码创建了自己的函数:
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)))
Run Code Online (Sandbox Code Playgroud)