python - 移动列表中的点,使条目至少“dist”分开
问题描述
我有一个参考浮动列表,例如,
x_ref = [-0.1, 1.0, 1.2, 3.5, 7.5, 12.0]
我想找到一个x
满足两件事的清单:
- 中的条目
x
至少dist
分开(例如,2.0) - 中的条目
x
尽可能靠近他们的x_ref
伙伴,即他们最小化平方距离1/2 sum((x_ref[i] - x[i]) ** 2) -> min
我做了一些东西,但它很臃肿而且可能有问题。也许这里有一个简单的方法。有什么提示吗?
解决方案
首先,您需要识别列表中每个严重拥塞的区域,即最大的子序列 (i, j),使得
(x[j] - x[i]) / 2.0 < j-i
编辑 Nico 的评论是正确的:我不允许在一端有效地打开间隔。我认为调整差距识别会成功......
(x[j] - x[i]) / 2.0 < j-i-1
编辑结束
在您给定的示例中,只有一个这样的位置,值 -0.1 到 3.5,相差 3.6,其中需要扩展 6.0。最小价差将由p + 2.0 * k
闭区间 [0, (ji)] 中 k的数字组成
您现在有了错误的表达式:
sum for k = 0, (j-i)
(x[k] - (p + 2k))^2
所有的x[k]
值都是已知的,并且所有的2k
值都是已知的。展开表达式,求解p
并最小化 - 取导数并将其设置为 0。结果p
值为您提供 的新值x[i]
,其他值随之而来。
推荐阅读
- json - 如何更改从 Go 服务器返回数据而不存储数据的格式
- python - 如何使用 Python 和托管标识/SAS 凭据从 VM 访问 Azure 存储帐户
- postgresql - 如何通过检查列的时间来创建 CASE WHEN
- android - Ionic 3 cordova 遇到设备/模拟器错误 [Android]
- entity-framework - 未使用的表列需要在实体框架对象类中声明为属性?
- node.js - 将 reactjs 与 nodejs 连接起来
- laravel - 从数据库中检索分层数据
- javascript - 避免 TypeScript 中接口的初始 I 不会导致命名冲突吗?
- microsoft-graph-api - 如何识别 OneDrive DriveItem 权限标识是组还是用户
- c# - 如何使用 Web Api 在 Dynamics 365 CRM(在线)中发现我的组织的 URL