gpt4 book ai didi

python - 在两个点数组上循环

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:35 25 4
gpt4 key购买 nike

我有两个点数组:list1list1.shape = [N, 3] 以及 list2list2。形状 = [M, 3]N, M内:点的总数,(x, y, z)是3维坐标。

现在我想检查 list1 的每个点与 list2 的每个点是否在 r 的距离内。执行此操作的自然方法是 for 循环:

for i in range(N):
for j in range(M):
if (list1[i, 0] - list2[j, 0])**2 + (list1[i, 1] - list2[j, 1])**2 + (list1[i, 2] - list2[j, 2])**2 < r**2:
''' Return 1 if list1[i] is within list2[j] '''
return True
else:
''' Return 0 if list1[i] is not within list2[j] '''
return False

但是速度太慢了。我可以采用更有效的方法吗?

最佳答案

您可以使用外部操作来计算没有 for 循环的距离矩阵:

s = np.subtract.outer

d_matrix = s(list1[:,0], list2[:,0])**2
d_matrix += s(list1[:,1], list2[:,1])**2
d_matrix += s(list1[:,2], list2[:,2])**2

其中每条线是点 i 到所有点的距离。要使用您的标准找出点 i 是否接近任何点:

a = np.zeros_like(list1[:,0])
a[np.any(d_matrix < r**2, axis=1)] = 1

关于python - 在两个点数组上循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22328735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com