Как определить, какие точки находятся внутри многоугольника, а какие нет (большие количество точек)?

У меня есть большой набор точек данных (более 100 000), хранящихся в двумерном массиве numpy (1-й столбец: координаты x, 2-й столбец: y координаты). У меня также есть несколько одномерных массивов, хранящих дополнительную информацию для каждой точки данных. Теперь я хотел бы создать графики из подмножеств этих одномерных массивов, которые включают только точки, которые находятся в данном многоугольнике.

Я придумал следующее решение, которое нельзя назвать ни элегантным, ни быстрым:

#XY is the 2D array.
#A is one of the 1D arrays.
#poly is a matplotlib.patches.Polygon

mask = np.array([bool(poly.get_path().contains_point(i)) for i in XY])

matplotlib.pylab.hist(A[mask], 100)
matplotlib.pylab.show()

Не могли бы вы помочь мне улучшить этот код? Я попытался поиграть с np.vectorize вместо понимания списка, но не смог заставить его работать.

21
задан AbuBakr 12 January 2012 в 10:59
поделиться