首页 > 解决方案 > 如何创建覆盖整个样本区域的 xy 网格,在 python 中具有特定数量的节点?

问题描述

我正在查看 2D 空间数据 (x,y,(z)),其中 z 是 x,y 的属性,而不是另一个空间维度。我想要在我的应用程序中做的是让用户切换“x 节点数”滑块。该程序查看他们加载的样本数据,并使用其数据的纵横比,选择 y 节点的数量以在其样本上创建 1:1 纵横网格。

网格节点选择

这部分工作正常。但知道我需要创建实际的网格数据。我使用 itertools 执行此操作,并获取两个数组的所有组合。一个用于 x,一个用于 y。

xnodes=#number of x from user choice
dx=(max(x)-min(x))/xnodes
grid_xy = np.array(list(itertools.product(
            np.arange(min(x),max(x),step=dx),
            np.arange(min(y),max(y),step=dx)))) 

请注意,我在两个数组中都使用了 dx,因为我希望网格纵横比为 1:1。总节点的数量只是给用户,以便他们知道是否需要很长时间来计算。我得到的是这样的情况。

在此处输入图像描述

网格节点不会覆盖整个区域(随着 x 节点的数量越来越大,它最终会变得非常接近)。此外, np.arange 中固有的舍入意味着有时它会超出样本数据,这是我想要的,bt 有时会低于。如何确保使用我的网格捕获所有示例数据,同时仅使用为用户指定的节点数?我可以看到的一个解决方案是在每个网格列的末尾添加另一行节点。

标签: pythonnumpygrid

解决方案


答案是

self.grid_xy = np.array(list(itertools.product(
     np.linspace(self.min_gx,self.max_gx,num=self.s1.get()),
     np.linspace(self.min_gy,self.max_gy,num=self.s2.get())))) 

或者,没有类结构

self.grid_xy = np.array(list(itertools.product(
     np.linspace(min(x),(max(x),num=x_nodes),
     np.linspace(min(y),(max(y),num=y_nodes)))) 

推荐阅读