python - 如何重新排序一组数据点以最小化另一组数据点的错误
问题描述
我有以下 15 个数据点:
[0.287 , 0.0691, 0.856, 0.731, 0.895, 0.76, 0.496, 0.749, 0.77, 0.684, 0.667, 0.386, 0.4, 0.334, 0.346]
而且我希望更改这些数据点的顺序,以便使用以下 15 个数据点集来最大程度地减少错误:
[0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1]
我可以尝试第一组数据点的所有排列,看看哪个给出最小的错误,但这将永远......
解决方案
我错误地假设您的意思是总和绝对差。不难检查这个错误是否最小化,a
并且b
具有相同的排名顺序。因此,a
可以使用argsort
>>> a = np.array([0.287 , 0.0691, 0.856 , 0.731 , 0.895 , 0.76 , 0.496 , 0.749 , 0.77 , 0.684 , 0.667 , 0.386 , 0.4 , 0.334 , 0.346 ])
>>> b = np.array([0.1, 0.3, 0.5, 0.7, 0.9, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.2, 0.1])
>>>
>>> best_shuffle = np.empty(a.size,int)
>>> best_shuffle[b.argsort(kind="stable")] = a.argsort(kind="stable")
>>>
>>> np.abs(b-a[best_shuffle]).sum()
1.3499000000000005
推荐阅读
- java - 在 iOS-Objective C 上签名的数据在 Java 中验证时总是返回 false
- visual-studio - Visual Studio 中的这个框叫什么,如何禁用它?
- php - SQL 从表中获取值
- android - FirebaseUI for Auth,自定义布局仅响应设置为 AuthMethodPickerLayout 的视图
- angularjs - 如何在angularJS中将范围属性显示为文本输入
- rust - 使用 Any 特征获取对包含引用的结构的引用时的生命周期问题
- java - 如何从输入框中获取字符串?
- c - 减号运算符用作一元按位运算
- ios - 如何在多个 collectionView 部分中使用单个数组?
- dockerfile - 新容器从引用的图像中获取数据.. 那为什么需要卷?