python - 根据匹配的选定列清理和重新排序两个数组的最有效方法
问题描述
假设我们有 array1 和 array2 都是二维的,并且可能有非唯一的行和不同的行数。
我的最终目标是拥有两个具有相同形状的数组的清理版本,并对其进行排序,以使每个行索引的第 2,3 和 4 列中的值相同。
在下面我描述了一个可能的序列来实现这个最终目标,我想知道使用 numpy 的最有效方法。
1_如果 array1 中的行在第 2、3、4 列中具有相似的值,则删除它们。
2_如果 array2 中有行在第 2,3,4 列中具有相似的值,则将其删除。
因此,基于这些列,两个数组都将具有唯一的行。
3_然后我想删除两个数组中在第 2、3、4 列方面在另一个数组中没有匹配行的行。
所以两个数组现在应该有相同的长度。
4_然后我想对array1 重新排序,以便具有相同索引的array2 在第2、3、4 列中具有相同的值。
-------------编辑:数字示例:
array1 = array([1,4,3, 64356,5435,434],
[11,46,3, 7356,585,74],
[51,406,3, 769,5435,24],
[12,45,5, 656,135,134],
[112,475,5, 656,1385,134],
[13,46, 5, 656,1385,19]])
array2 = array([15,44, 5, 656, 1385, 434],
[165,644,5, 656, 1385, 48],
[151,436,3, 356, 285,74],
[521,406,5, 656, 135,24],
[152,445,54, 56,635,134],
[1812,757,542, 546,185,1834],
[72,77,142, 66,65,64],
[72,727,12, 16,55,634]])
array1_final = array([112,475,5, 656,1385,134],
[12,45, 5, 656,135,134]
])
array2_final = array([15,44, 5, 656,1385,434],
[521,406,5, 656,135,24]
])
尽管 array2[0] 和 array2[1] 在它们的 2,3,4 列方面都具有匹配的 array1[4],但只有其中一个保留在最终的 array2 中。同样,array1[5] 被删除。就匹配 2、3、4 列而言,最终数组的顺序相同。其余的被删除,因为它们在另一个数组中没有 2,3,4 列的匹配对应项。
解决方案
我有一个答案,尽管无可否认可能会有更好的答案。
#find the unique rows
array1_v,array_i = np.unique(array1[:,[2,3,4]], axis=0, return_index=True)
array2_v,array2_i = np.unique(array2[:,[2,3,4]], axis=0, return_index=True)
#find if the unique rows exist in the other array
array1_in_array2 = [row.tolist() in array2_v.tolist() for row in array1_v] array2_in_array1 = [row.tolist() in array1_v.tolist() for row in array2_v]
array2_in_array1 = [row.tolist() in array1_v.tolist() for row in array2_v] array2_in_array1 = [row.tolist() in array1_v.tolist() for row in array2_v]
#final results
array1_final = array1[array1_i[array1_in_array2]]
array2_final = array2[array2_i[array2_in_array1]]
>>> array1_final
array([[ 12, 45, 5, 656, 135, 134],
[ 112, 475, 5, 656, 1385, 134]])
推荐阅读
- node.js - 如何使用 Chrome Lighthouse 分析 Node.js / 后端代码?
- microsoft-graph-api - 为什么 Microsoft Graph Planner API 突然对团队中的外部来宾用户失败?
- angular - 如何使用 nativescript-background-http 获取总上传大小
- reactjs - 通过浏览器调用 Google Vision API 从存储在 Firestore 中的文件中检测文档文本
- php - 我想使用 jquery ajax 将变量从一个 php 页面发送到另一个页面
- c# - 如何在处理时存储大量数据行。在 REST 中有效吗?
- android - 一起使用 AndroidX 和 Support Lib?
- oracle - Oracle 报表圆角图像
- java - 在 Junit 测试用例中使用 Hamcrest 比较 LocalDate
- python - pyQt5中的pyOpenGL-点云渲染中的相机位置