我使用python脚本来读取两个大的(数百万个点)点云作为数组(" A"和#34; B")。
我需要找到最近的" B" " A"中的点的邻居,但在" A"中的每个点的5厘米内。我还希望平均在#34; A中的点的半径5厘米内的邻居。"
有没有办法一次性使用cKTree,包括平均值?
答案 0 :(得分:2)
我不确定你想做什么,但如果我理解正确,你可以按照以下步骤操作:
# 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)
答案 1 :(得分:0)
cKDTree没有任何单位;我希望您的测量值都以单位(cm)为您所需的操作。
你是什么意思,你希望"平均邻居"?这只是5个单位球内所有邻居的平均位置吗?
根据您发布的内容,我相信您的关键操作是
for A_point in A:
hood = B.query_ball_point(A_point, 5)
现在,只是"平均" 引擎盖中的要点。我假设你知道怎么做那部分; cKDTree没有这样的操作,因为SciPy和Python提供基类型的那些。
您可以使用 A 作为 query_ball_point 的第一个参数来执行此操作,但随后您将获得一个巨大的社区列表,也许会打破你的记忆限制。
这会让你感动吗?