【发布时间】:2023-03-18 18:40:02
【问题描述】:
我有三个相当大的NumPy 数组,它们的行数不同,它们的第一列都是integers。我希望过滤这些数组,以便剩下的唯一行是第一列中的值由所有三个共享的行。这将留下三个相同大小的数组。其他列中的条目不一定在数组之间共享。
所以,输入:
A =
[[1, 1],
[2, 2],
[3, 3],]
B =
[[2, 1],
[3, 2],
[4, 3],
[5, 4]]
C =
[[2, 2],
[3, 1]
[5, 2]]
我希望作为输出返回:
A =
[[2, 2],
[3, 3]]
B =
[[2, 1],
[3, 2]]
C =
[[2, 2],
[3, 1]]
我目前的做法是:
使用
numpy.intersect1d()查找前三列的交集在此交集和每个数组的第一列上使用
numpy.in1d()来查找每个数组中未共享的行索引(使用此处找到的方法的修改版本将boolean转换为索引:@ 987654321@)最后将
numpy.delete()与每个索引及其各自的数组一起使用,以删除第一列中具有非共享条目的行。
我想知道是否有更快或更优雅的 Pythonic 方式来解决这个问题,但它适用于非常大的数组。
【问题讨论】:
标签: python arrays numpy rows intersection