我正在使用Python脚本将两个大型(数百万点)点云作为数组(“A”和“B”)读入。
我需要找到“A”中每个点周围5厘米内最近的“B”邻居。我还想计算在“A”点5厘米半径内的邻居的平均值。
是否有一种方法可以一次性地使用cKTree完成这个任务,包括平均值计算?
我正在使用Python脚本将两个大型(数百万点)点云作为数组(“A”和“B”)读入。
我需要找到“A”中每个点周围5厘米内最近的“B”邻居。我还想计算在“A”点5厘米半径内的邻居的平均值。
是否有一种方法可以一次性地使用cKTree完成这个任务,包括平均值计算?
我不确定你想要做什么,但如果我理解正确,你可以按照以下步骤操作:
# this are just random arrays for test
A = 20 * np.random.rand(1000, 3)
B = 20 * np.random.rand(1000, 3)
tree_A = cKDTree(A)
tree_B = cKDTree(B)
# faster than loop + query_ball_point
neighbourhood = tree_B.query_ball_tree(tree_A, 5)
means = np.zeros_like(A)
for i in range(len(neighbourhood)):
means[i] = A[neighbourhood[i]].mean(0)
cKDTree没有任何单位;我希望你的测量值都是以厘米为单位进行的,以便进行所需的操作。
你说的“平均邻居”是什么意思?这只是5个单位球内所有邻居的平均位置吗?
根据你发布的内容,我认为对你来说关键的操作是:
for A_point in A:
hood = B.query_ball_point(A_point, 5)