我需要在两个范围(例如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()
但是结果如下:
分布的两半处于不同的比例。我猜这是因为np.geomspace()可用于实际输入值的转换。有人知道像我的例子那样中心和每个边界之间的距离相等的情况下,会给我对称分布的函数吗?
答案 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()
答案 1 :(得分:0)