Scikit имеет реализацию для такого алгоритма рисования многоугольника.См. skimage.draw.polygon
Изменить: конкретный код для вопроса
from skimage.draw import polygon, polygon_perimeter
import numpy as np
arr = np.zeros((5, 5))
shapePoints = np.array([[0,2], [2,4], [3,1]])
points_r, points_c = shapePoints[:, 0], shapePoints[:, 1]
interior_r, interior_c = polygon(points_r, points_c)
perimeter_r, perimeter_c = polygon_perimeter(points_r, points_c)
arr[perimeter_r, perimeter_c] = 3
arr[points_r, points_c] = 2
arr[interior_r, interior_c] = 1
Обратите внимание, что это дает результат, отличный от результата в вопросе, чтобыпроиллюстрировать разницу между интерьером и периметром.
>>> arr
array([[0., 0., 2., 0., 0.],
[0., 0., 1., 3., 0.],
[0., 3., 1., 1., 2.],
[0., 2., 3., 0., 0.],
[0., 0., 0., 0., 0.]])