映射具有相同值但订单不同的数组

时间:2014-06-26 11:05:22

标签: python arrays

我有来自CFD计算的两个独立文件的两个坐标数组。一个是包含连接信息的网格文件,另一个是结果文件。

我的问题是每个文件的坐标顺序不同。我希望能够做的是从结果文件中订购所有数组的顺序与网格文件的顺序相同。

我的想法是找到xyz坐标的匹配值并创建一个映射,以便可以对其余的结果数组进行排序。

我在想这样的事情:

mapping = np.empty(len(co_mesh))

for i,coord in enumerate(co_mesh):
    for j in range(len(co_res)):
        if (coord[0]==co_res[j,0]) and (coord[1]==co_res[j,1]) and (coord[2]==co_res[j,2]):
            mapping[i] = j

其中co_mesh,co_res是包含x,y,z坐标的数组。

问题是我怀疑这个循环需要很长时间。目前我只能在70000点左右进行循环,但将来可能会增加到100万点以上。

有没有更快的方式在Python中编写它。

我正在使用Python 2.6.5。


对于那些感兴趣的人,这是我目前使用的:

mesh_coords = zip(xm_list,ym_list,zm_list,range(len(x_po)))
res_coords = zip(xr_list,yr_list,zr_list,range(len(x)))

mesh_coords = sorted(mesh_coords , key = lambda x:(x[0],x[1],x[2]))
res_coords = sorted(res_coords , key = lambda x:(x[0],x[1],x[2]))

mapping = zip(np.array(listym)[:,-1],np.array(listyr)[:,-1])

mapping = sorted(mapping , key = lambda x:(x[0]))

1 个答案:

答案 0 :(得分:0)

如何在x和y最小z坐标的两个文件中排序坐标向量?

如果对向量使用numpy数组,则可以高效快速地执行此操作。

<强>更新

如果结果网格中没有节点的节点ID。但坐标是一样的。执行以下操作:

在矢量中添加编号作为附加信息。按x,y,z对两个网格进行排序,将现在未分类的网格编号添加到您的镜头中,并沿着该轴对该镜头进行排序。现在,冒充包含与原始网格一样的确切顺序。