如何在python中找到两个x,y坐标数组之间的可容忍重叠(numpy)

2024-10-03 09:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个不同长度的二维数组。我怎样才能找到这些数组在第零个轴上的重叠,在一定的公差内?例如,如果

a1 = [1,1.2]
a2 = [1,2.1]
a3 = [1,1.1]
a4 = [.89, 2.21]
a5 = [0,0] 
coors1 = np.array( [ a1, a2 ])
coors2 = np.array( [ a3, a4, a5 ])

然后我想要一个函数overlap,它给出

^{pr2}$

我想出了一个

def overlap(coor1, coors2, tolerance ) :
    return [ c1 for c1 in coors1 for c2 in coors2 if np.all( np.isclose( c1, c2, atol=tolerance))   ]

但看起来可能很慢。。。在

对于那些有兴趣和关心插嘴的人

我的问题源于我正在做的一些数据库工作。我有几个数据库,每个数据库都有x,y坐标列。还有一些列表示在这些坐标下执行的各种测量。我需要比较基于坐标的数据库,考虑到一些坐标会受到浮点舍入错误的影响。在


Tags: 数据库a2fora1np数组arraytolerance
1条回答
网友
1楼 · 发布于 2024-10-03 09:14:48

如果我答对了问题,您可以使用^{}以矢量化的方式解决它-

def overlap(coors1, coors2, tolerance ):

    # Perform elementwise absolute subtractions between input arrays 
    sub_abs_vals = np.abs(coors1[None,:,:] - coors2[:,None,:])

    # Check for ANY equality along 0-th axis & ALL equality along 2-nd axis.
    # Return the corresponding row from first input array.
    return coors1[np.all(np.any(sub_abs_vals<=tolerance,axis=0),axis=1)]

验证结果-

^{pr2}$

相关问题 更多 >