Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最小化两个列表之间的增量_Python_Optimization_Scipy - Fatal编程技术网

Python 最小化两个列表之间的增量

Python 最小化两个列表之间的增量,python,optimization,scipy,Python,Optimization,Scipy,给定两个列表,其中一个列表按某个系数的α进行缩放: 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代表i in x,如果i

给定两个列表,其中一个列表按某个系数的α进行缩放:

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代表i in x,如果i<40])~400
我想知道
y
的阈值应该是什么,因为
alpha
未知,所以元素返回的数量是~400,在本例中为48

您可以计算平均值
alpha
,如下所示:

alpha = sum((yn / float(xn)) for xn, yn in zip(x, y)) / len(x)
然后:


如果最小化
abs(len(filtered_x)-len(filtered_y))
至关重要,则可以在
y_阈值附近执行局部搜索

您的
x_阈值
允许您知道它下面有多少
x
(此处
400
)。因此,您只需在
y
中找到排名第400位的元素,并将其用作
y\u阈值

您可以通过排序
y
(这是多余的)或选择第N个(可以在
O(N)
中完成)。这种方法总是达到
delta=0


对于更简单的近似解决方案,将
alpha
估计为两个列表总和的比率,并设置
y_threshold=alpha。x_阈值
。(可能首选
alpha
Sum(y.x)/Sum(x^2)
,或标准差比率的最小二乘估计值)

如果
alpha
未知,您甚至会如何计算
y
?如果希望每个列表中的项目数相同,
y
的阈值就是
threshold*alpha
。或者过滤
x
,然后创建
y
。我只为问题设置alpha,我有两个列表,一个是另一个的近似缩放版本,我有一个固定的x阈值,我想要y阈值。显然,当您知道列表之间的关系时,答案就很清楚了。因此您有
x
y
x_阈值
,您想计算
y_阈值
y_threshold = int(alpha * x_threshold)