【发布时间】:2020-05-14 08:05:27
【问题描述】:
我有两个“顶点”数组(x、y、z 位置):
vert_list_1 = [[1.2, 3.4, 5.6]...[-5.2,-6.0,2.9]]
vert_list_2 = [[10.0, 9.1, 2.7]...[117.0, 1.1, 2.8]]
列表有不同的长度。
我希望找到一个列表最接近的_vert_2_index,这样
np.linalg.norm(vert_list_2[closest_vert_2_index[i]] - vert_list_1[i])
被最小化了。
closest_vert_2_index 可以包含重复项(谢天谢地,否则这是一个更难的问题!)
天真地我会这样做
closest_vert_2_index = []
for vert in vert_list_1:
best_dist = None
best_vert_2_id = None
for i, vert_2 in enumerate(vert_2_list):
dist = np.linalg.norm(vert_2 - vert)
if best_dist is None or dist < best_dist:
best_dist = dist
best_vert_2_id = i
closest_vert_2_index.append(best_vert_2_id)
但我想知道是否有人可以更快地想到任何事情。
【问题讨论】:
-
我不确定您为什么要使用
lists,因为即使您的幼稚方法也行不通(vert_2 - vert将失败,因为-未在列表中定义)。 -
@divakar 相关问题是相关的,但是建议的副本没有处理一个额外的循环。
-
@norok2 我在那里看不到循环。而
Kdtree应该就足够了。 -
@Divakar 查看两个问题中的 OP 代码,另一个有一个循环,这个有两个循环。输入也不同。可能是kdtree有用,但是这两个问题问的不是同一个问题。
-
@norok2 对于重复项,我想我们看看答案。假设数组输入(我认为这是安全的,因为发布的代码似乎假设相同),使用 ckDtree 在那里接受的一个非常有效地解决了它,同样在这里没有任何更改。这两个本质上是在问同一个问题,只是用了不同的词。