Предположим, вы гарантируете, что выбранная точка действительна для создания квадратной матрицы 3x3 с выбранной точкой в центре , и каждая противоположная позиция имеет только одно ненулевое значение, как в вашей образец. Вы можете использовать нарезку и np.rot90
и bitwise_or
a = np.array([[0, 0, 0, 0, 0],
[0, 3, 4, 0, 0],
[5, 2, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]])
px, py = (2,1)
aa = a[px-1:px+2, py-1:py+2]
Out[2176]:
array([[0, 3, 4],
[5, 2, 0],
[0, 0, 1]])
a[px-1:px+2, py-1:py+2] = np.bitwise_or(aa, np.rot90(aa, 2))
Out[2178]:
array([[0, 0, 0, 0, 0],
[1, 3, 4, 0, 0],
[5, 2, 5, 0, 0],
[4, 3, 1, 0, 0],
[0, 0, 0, 0, 0]])