查找两个数组的几乎相等的元组成员?
Finding almost equal tuple members of two arrays?
我有 2 个位置元组列表(x,y 数据)。我想要 return 2 个数组或两个列表中位置(或元组)的索引列表。然而,位置数据值不会完全相等,x 和 y 坐标都将存在 +/- 4 的不确定性。
例如:
A=[(1168.593,9.874), (1799.244,40.201),(780.533,12.636)]
B=[(1170.909,8.194), (793.149,10.885), (1801.493,41.603)]
应该return:
c=[(0,0),(1,2)]
或:
d=[0,1] #indexes for A
e=[0,2] #indexes for B
两者都可以使用。
Python 中是否有函数可以使用 return 2 个列表中匹配数据的索引,同时指定 +/- 值?
我需要对 3 个列表执行此操作,每个列表约 400 个元组,它们的大小不相等。
我什至在考虑使用类似的东西:
common=[a in A for a in B]
并以某种方式指定 a
的范围,只查看 x 和 y 数据和 return 索引而不是 true/false,但我真的不知道如何接近这个。循环是执行此操作的唯一方法吗?通过分别查看每个值,获取它们之间的差异并查看是否小于 4,然后获取索引?
也许您可以考虑使用 math
模块中的函数 isclose
?
暴力解决方案怎么样?
In [5]: c = []
In [6]: for i, (x1, y1) in enumerate(A):
...: for j, (x2, y2) in enumerate(B):
...: if (x1 - 4 <= x2 <= x1 + 4) and (y1 - 4 <= y2 <= y1 + 4):
...: c.append((i,j))
...:
...:
In [7]: c
Out[7]: [(0, 0), (1, 2)]
当然,你可以用任何你想要的替换条件。可能,使用 math.isclose
是个好主意。可能有更好的 numpy
方法以矢量化方式执行此操作。但如果效率不是问题,这应该可行。
我有 2 个位置元组列表(x,y 数据)。我想要 return 2 个数组或两个列表中位置(或元组)的索引列表。然而,位置数据值不会完全相等,x 和 y 坐标都将存在 +/- 4 的不确定性。
例如:
A=[(1168.593,9.874), (1799.244,40.201),(780.533,12.636)]
B=[(1170.909,8.194), (793.149,10.885), (1801.493,41.603)]
应该return:
c=[(0,0),(1,2)]
或:
d=[0,1] #indexes for A
e=[0,2] #indexes for B
两者都可以使用。
Python 中是否有函数可以使用 return 2 个列表中匹配数据的索引,同时指定 +/- 值?
我需要对 3 个列表执行此操作,每个列表约 400 个元组,它们的大小不相等。
我什至在考虑使用类似的东西:
common=[a in A for a in B]
并以某种方式指定 a
的范围,只查看 x 和 y 数据和 return 索引而不是 true/false,但我真的不知道如何接近这个。循环是执行此操作的唯一方法吗?通过分别查看每个值,获取它们之间的差异并查看是否小于 4,然后获取索引?
也许您可以考虑使用 math
模块中的函数 isclose
?
暴力解决方案怎么样?
In [5]: c = []
In [6]: for i, (x1, y1) in enumerate(A):
...: for j, (x2, y2) in enumerate(B):
...: if (x1 - 4 <= x2 <= x1 + 4) and (y1 - 4 <= y2 <= y1 + 4):
...: c.append((i,j))
...:
...:
In [7]: c
Out[7]: [(0, 0), (1, 2)]
当然,你可以用任何你想要的替换条件。可能,使用 math.isclose
是个好主意。可能有更好的 numpy
方法以矢量化方式执行此操作。但如果效率不是问题,这应该可行。