以python中的值为中心的对数间距范围?

时间:2019-06-28 19:59:00

标签: python

我需要在两个范围(例如1和100)内创建一个值数组,其中值相对于某个中心(例如50)对数间隔。也就是说:大多数值应接近50,但以指数级向1或100移。

我已经尝试过np.geomspace()函数

def sample_exponentially(center,N,lower_bound, upper_bound):
    lower_bound_to_center=np.geomspace(center,lower_bound,num=N/2)
    upper_bound_to_center=np.geomspace(center,upper_bound, num=N/2)
    lower_bound_to_center = center - lower_bound_to_center
    return lower_bound_to_center.tolist() + upper_bound_to_center.tolist()

但是结果如下:

results plot image

分布的两半处于不同的比例。我猜这是因为np.geomspace()可用于实际输入值的转换。有人知道像我的例子那样中心和每个边界之间的距离相等的情况下,会给我对称分布的函数吗?

2 个答案:

答案 0 :(得分:3)

为了获得围绕中心点的紧密分布,您应该从1生成进度,然后再添加center(或从中减去):

import numpy as np
center      = 50
lower_bound = 1
upper_bound = 100
N           = 12
upper_bound_to_center = center + np.geomspace(1,upper_bound-center, num=N/2)
lower_bound_to_center = center - np.geomspace(1,center-lower_bound, num=N/2)
result = list(lower_bound_to_center) + list(upper_bound_to_center)

from matplotlib import pyplot
pyplot.plot(result, [1]*len(result), 'ro')
pyplot.show()

enter image description here

答案 1 :(得分:0)

非常感谢!这与我的大多数数据完美配合,但是对于0.00001到1(中心= 0.5)之间的范围,它给了我完全不同的东西:enter image description here