给定两个列表,其中一个列表按某个因数alpha
缩放:
from random import randint
alpha = 1.2
x = [randint(1, 100) for x in range(1000)]
y = [int(alpha * i) for i in x]
我想过滤两个列表中低于某个阈值的值,从而使两个列表中返回的元素数量的增量最小化。因此,如果我的x
的阈值是40,那么len([i for i in x if i < 40]) ~ 400
我想知道当alpha
未知时y
的阈值应该是多少,因此返回的元素数是~400,即本例中的48。
您可以计算平均值
alpha
,如下所示:然后:
如果最小化
abs(len(filtered_x) - len(filtered_y))
是关键,那么可以在y_threshold
周围执行局部搜索。你知道吗你的
x_threshold
允许你知道它下面有多少个x
(这里是400
)。所以您只需要在y
中找到排名第400位的元素,并将其用作y_threshold
。你知道吗您可以通过排序
y
(这是过度杀戮)或选择第n个(可以在O(N)
中完成)。这种方法总是达到delta=0
。你知道吗对于更简单的近似解,估计
alpha
为两个列表和集合y_threshold = alpha . x_threshold
之和的比率。(可以优选alpha
、Sum(y.x)/Sum(x^2)
或标准差比率的最小二乘估计值)相关问题 更多 >
编程相关推荐