问题
我的程序生成了几组数据,这些数据使我能够在 tkinter 画布上渲染顶点网络及其连接。我需要能够找到网络中每个顶点的第 N 个邻居。
我的代码已经识别了每个顶点与其直接邻居的连接,这意味着使用列表推导很容易找到第一组邻居,使用选定的顶点作为搜索数据的值。我实际上想以最有效的方法对每个邻居重复此搜索。正在搜索以实现此目的的数据(我已经计算过)p_2
在下面的代码中指定,格式为:(原点坐标,邻居坐标),和Coordinates_xyz
是网络的唯一顶点的列表。下面的代码演示了我当前如何仅识别第一个邻居。
同样,我已经有了所有的邻居数据,我只需要最好的方法来搜索这些数据以找到到每个顶点的连接。
清晰度:
我正在尝试做的示例:
我的程序生成的一种数据表示重复正方形模式的顶点网络。每个顶点(远离边缘)有 4 个邻居,然后每个邻居有 4 个邻居(尽管这些邻居中的一个邻居是前一个顶点,所以被打折了)等等。如果我选择带有坐标的顶点 20(x20, y20, z20)
并在 p_2 中搜索邻居,它可能会返回(例如):(
Origin),(Neighbour)
(x20, y20, z20), (x21, y21, z21)
(x23, y23, z23), (x20, y20, z20)
(x26, y26, z23), (x20, y20, z20)
(x20, y20, z20), (x30, y30, z30)
然后我可以清楚地看到顶点 21、23、26 和 30 是网络中与顶点 20 的相邻点。但是,我需要分别重复 21、23、26 和 30 的搜索过程以找到第二个最近的邻居。对于 N 个最近的邻居,我必须找到一种方法来制定一种有效(尽可能)的方法,对每个邻居重复此搜索并从顶点 20 向外进行,同时跟踪邻居的顺序。同样,我知道这会对大 N 造成负担,但它通常不会在 N>4 时运行。下面的代码解决了 N = 1 的问题。
matching_1_NN_list=[]
matching_1_NN_list[:]=[]
for vertex in xrange(len(Coordinates_xyz)):
#Target vertex Coordinates_xyz[vertex]
matching_1_NN = [x for x in p_2 if Coordinates_xyz[vertex] in x]
matching_1_NN_Component_0=column(matching_1_NN, 0)
matching_1_NN_Component_1=column(matching_1_NN, 1)
for x in matching_1_NN_Component_0:
if x == Coordinates_xyz_final[vertex]:
pass
else:
x=x, vertex, 1 #coordinates, vertex number, order (1 = first neighbour)
matching_1_NN_list.append(x)
for x in matching_1_NN_Component_1:
if x == Coordinates_xyz_final[vertex]:
pass
else:
x=x, vertex, 1
matching_1_NN_list.append(x)
matching_1_NN_list=set(list(matching_1_NN_list)) #Removes Duplicates