scipy Python中不同大小数组的2D点匹配

avwztpqn  于 2023-05-22  发布在  Python
关注(0)|答案(1)|浏览(138)

我有两个数组,A和B的大小分别为(2,25919)和(2,64788)。我一直在尝试将数组B的行和列值与点A中的值进行比较,以查看哪些值落在点A的指定半径内。
我已经尝试了Given two lists of 2d points, how to find the closest point in the 2nd list for every point in the 1st list?中的切片和KDTree示例,这是一个与我自己的问题很接近的问题。然而,由于我自己的数组是2个不同的大小,我得到错误。
我自己的代码现在看起来像这样:

A = [decamra, decamdec]
B = [ra, dec]

tree = KDTree(A)
results = tree.query_ball_point(B, r=r)
result = sum(len(list) for lis in results)

它返回错误“x必须由长度为25919的向量组成,但具有形状(2,64788)”。
同样,我希望代码能找到B中所有落在A点半径内的点,我已经尝试了很多其他方法,但数组大小似乎是我在这里遇到的最大问题。有没有办法修改这段代码,使数组大小不必匹配?

yacmzcpb

yacmzcpb1#

使用广播进行外减法,计算每一个可能的对距离,然后进行比较。因为你需要A的全部,你可以划分B,然后把结果连接起来。

A = np.random.randint(0, 100, (2, 25919))
B = np.random.randint(0, 100, (2, 10000))  # B too large

radius = 5

dist = A[:, :, None] - B[:, None]
dist = np.square(dist).sum(axis=0)
dist = np.sqrt(dist)

B_close = B[:, np.any(dist <= radius, axis=0)]

相关问题