我有以下问题。我有一个x值数组。现在,它们都应该通过一个指数函数来转换成一个新的数字范围。函数需要是数组友好的,因此输入可以是整个数组。我需要一个函数,你可以改变范围,应该改变,他们应该铸造到什么范围。此外,如果x值超出范围,则需要填充值,如scipy interp1d。我试过了:
def exponentialInter(x,border1,border2,interV1,interV2,fillValue):
#x is the x Value array
x = x.astype(np.float)
mask1 = x<border1
mask2 = x>border2
mask3= np.ma.mask_or(mask1,mask2)
x[mask3] = np.nan
y = np.exp(np.log(interV1)+np.log(interV2/interV1)*((x-border1) / (border2-border1)))
y = np.nan_to_num(y)
return y
对于产生正指数函数的范围,这是没有问题的,例如0到5之间的所有数字都应转换为2到20之间的数字:
^{pr2}$但是我遇到了一个严重的问题,如果x值的取值范围是负数,或者导致一个负指数函数,比如ranges:
interV1 = -1, interV2 =-15
interV1 = 1, interV2 =-17
interV1 = -20, interV2 = 20
interV1 = 20, interV2 = 2
我该如何改变我的方法,让它适用于那些情况?在
指数函数不能产生负数。有几种可能的选择,但一个简单的方法就是对间隔应用移位,使其始终从1开始,然后在结束时撤消移位。当
interV1 > interV2
时,您可以对两个数字求反,然后应用此移位,稍后撤消。所以最终可能是这样的:相关问题 更多 >
编程相关推荐