如何创建一个与点是否在多边形的numpy数组内相对应的numpy数组?

时间:2019-01-09 21:00:51

标签: python arrays numpy

这是我的尝试,但出现错误 "AttributeError: 'numpy.ndarray' object has no attribute 'contains'"

如果有任何人可以帮助我理解如何在这段代码中定义'y',使其成为一个numpy数组,其1对应于包含指定点的多边形的索引,而0对应于包含指定点的多边形。不包含指定点的多边形,我将不胜感激。

polygonss=[]
for i in range(0, len(verts)):
    polygonc = Polygon(verts[i])
    print (polygonc)
    polygonss.append(polygonc)
print (polygonss)
p=np.array(polygonss)
print (p)
vertsf=meshinformation_fine.celltoverticesandcentroid(0)[0]
point = Point(vertsf[0])
y=np.where(p.contains(point), 0, 1)
print (y)

2 个答案:

答案 0 :(得分:1)

numpy对象数组在这里对您不是特别有用,您也可以使用列表理解来完成该过程

y = [p.contains(point) for p in polygonss]

但是,如果您要在大量点上执行此操作,那么我建议您阅读geopandas,它可以使您对几何图形进行矢量化计算并将其应用于表格数据。

答案 1 :(得分:0)

首先,错误消息实际上是使您无法成功的原因。 .ndarray object只是没有该属性contains

将您的问题提交给其中一个solutions,讨论如何检查元素是否在numpy数组中。

如果我理解正确的话,那行后面的内容就是可以代替它工作的东西:

y = np.zeros(len(p))
for counter in range (0, len(p)):
    if point in p[counter]:
        y[counter] = 1 

注意:如果您要为变量和示例性预期输出添加示例性值,这将有所帮助。