Вы можете сделать это, используя пересечение горизонтальных и вертикальных шаблонов:
import numpy as np
N = 5
H = abs(np.arange(1-N,N+1,2))//2
V = (N-1)//2-H[:,None]
diamond = (H==V)*1
print(diamond)
[[0 0 1 0 0]
[0 1 0 1 0]
[1 0 0 0 1]
[0 1 0 1 0]
[0 0 1 0 0]]
Визуально это соответствует пересечению числовых равенств между строками и столбцами:
для N = 7:
[3, 2, 1, 0, 1, 2, 3]
0 . . . x . . .
1 . . x . x . .
2 . x . . . x .
3 x . . . . . x
2 . x . . . x .
1 . . x . x . .
0 . . . x . . .
для N = 8:
[3, 2, 1, 0, 0, 1, 2, 3]
0 . . . x x . . .
1 . . x . . x . .
2 . x . . . . x .
3 x . . . . . . x
3 x . . . . . . x
2 . x . . . . x .
1 . . x . . x . .
0 . . . x x . . .
Если вы хотите, чтобы алмаз был заполнен, используйте diamond = (H<=V)*1