删除边界条件之外的网格上的点 - Python

时间:2018-03-13 09:31:45

标签: python pandas dataframe data-manipulation

我有一个点网格(例如(1,1),(1,2),(1,3)......(100,99),(100,100))包含在一个pandas数据帧中,并且也导出为.csv文件。

然后我有一个边界条件,例如在这个网格中心的一个直径为25的圆。我希望能够删除圆外的所有点,并将内部的点保持为新的数据帧。

我可以得到圆的边界,xmin,xmax,ymin,ymax,但是当我删除与此相关的点时,我得到一个正方形(由于最小/最大值是整数,只是找到最远的从中心点。)

是否可以保存圆圈内的所有点?优选使用可应用于elipses等的通用方法。

编辑:我发现了这个,类似于:How to delete a set of meshgrid points inside a circle?

但是依赖于在代码中输入的圆的尺寸,因此不是通用的。由于我有形状的边界点,我将不得不计算它,并假设它是圆形的(它可能并不总是如此)。有没有办法调整这个,所以我可以使用边界点创建一个“填充”区域,然后执行布尔操作?

1 个答案:

答案 0 :(得分:0)

因为你的问题是......

  

是否可以保存圆圈内的所有点?

是的,这是可能的,并且有一个公式。 distance_from下面的函数是2D计划的基本欧氏距离。

def encloses(center_of_circle, vector2D, radius_of_circle):
    return distance_from(center_of_circle, vector2D) <= radius_of_circle

如果vector2D在圆圈中,则此函数encloses()将返回True。如果没有,则为假。用它过滤你的pandas DataFrame。

我怀疑,当你有一个正方形而不是一个圆形时,你正在为一个正方形计算公式encloses(),而不是一个圆...