Python的反馈循环,以便在大约中位数的范围内获得特定数量的点



我有一个数字值的列表x

首先,我指定一个范围。我想从这个范围内的x中获取值。取值范围从x的中位数取±R。我想调整R以获得特定数量的N值。我认为实现这一目标的唯一方法是通过某种反馈循环。什么是尽可能接近N的快速有效的方法?

x = ['3','5','1','2','4']我想要3-R<3<3+R的值范围,因为3是中位数。假设是N = 3。得到的值将是['2','3','4'], R工作为1。

示例代码:

N = 3
x = ['3','5','1','2','4']
R = 1
n = some number to allow room for error
y = values of x in range ±R from median
while len(y) > N+n or len(y) < N-n:
    if len(y) > N+n:
        R -= ADJUST VALUE PROPORTIONAL TO ERROR HERE?
    if len(y) < N-n:
        R += ADJUST VALUE PROPORTIONAL TO ERROR HERE?
    y = values of x in range ±R from median (update y list with new R)

我很天真地尝试用Bolzano定理的方法。先取中位数,然后取离中位数最远的值,把它们之间的距离称为L0。当然,这将包括所有的点。然后用L0除以2,检查有多少个点在这个区间内。还是太多还是太少?

  • 如果太多,L0=L, L = L0/2。
  • 如果它们太少,L=(L0+L)/2。

相关内容

  • 没有找到相关文章

最新更新