Как мне создать массив пустышек, который соответствует тому, находится ли точка внутри массива многоугольников? - PullRequest
0 голосов
/ 10 января 2019

Вот моя попытка, но я получаю ошибку "AttributeError: 'numpy.ndarray' object has no attribute 'contains'".

Если кто-нибудь из вас может помочь мне понять, как определить 'y' в этом коде так, чтобы это был пустой массив с единицами, соответствующими индексу многоугольников, которые содержат заданную точку, и нулями, соответствующими индексу многоугольников, которые не содержат указанный пункт, я был бы признателен.

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 голосов
/ 10 января 2019

Массив массива объектов здесь вам не особо полезен, вы также можете выполнить этот процесс со списком

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

Однако, если вы делаете это для большого количества точек, я рекомендую вам прочитать геопанд , который позволяет вам выполнять векторизованные вычисления для геометрий и применять их к табличным данным.

0 голосов
/ 10 января 2019

Во-первых, сообщение об ошибке на самом деле мешает вам добиться успеха .ndarray object просто не имеет этого атрибута contains

Который переводит ваш вопрос в одно из этих решений , обсуждая, как проверить, находится ли элемент в массиве numpy.

Одна вещь, которая могла бы работать вместо того, чтобы содержать, - это что-то, что следует за этой строкой, если я правильно понял:

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

Примечание: Было бы полезно, если бы вы добавили примерные значения для ваших переменных и ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...