1

我有 2 个位置元组列表(x,y 数据)。我想为两个列表中的位置(或元组)返回 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)]

它应该返回:

c=[(0,0),(1,2)]

或者:

d=[0,1] #indexes for A
e=[0,2] #indexes for B

任何一个都可以使用。

Python 中是否有一个函数可以通过指定 +/- 值来返回 2 个列表中匹配数据的索引?

我需要为 3 个列表执行此操作,每个列表有 ~400 个元组,它们的大小不相等。

我什至在考虑使用类似的东西:

common=[a in A for a in B]

并以某种方式为 指定一个范围a,只查看 x 和 y 数据并返回索引而不是 true/false,但我真的不知道如何处理这个问题。循环是做到这一点的唯一方法吗,通过分别查看每个值,获取它们之间的差异并查看这是否 < 4,然后获取索引?

4

2 回答 2

0

也许您可以考虑使用isclose模块中的功能math

于 2017-03-21T19:38:55.317 回答
0

蛮力解决方案怎么样?

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的方法以矢量化方式执行此操作。但如果效率不是问题,这应该可以工作。

于 2017-03-21T19:45:55.000 回答