я преуспел в цикле только через синий квадрат, и вот мой код:
import numpy as np
def index_generator(grid_dim):
center = grid_dim//2
dx = center + 1
sx = center
while(dx > 0 and sx < grid_dim):
dx -= 1
sx += 1
yield range(dx, sx)
while(dx <= (center) and sx >= (center + 1)):
dx += 1
sx -= 1
yield range(dx, sx)
grid_dim = 9
A = np.zeros((grid_dim, grid_dim))
for r, i in zip(index_generator(grid_dim), range(grid_dim)):
for j in r:
A[i, j] = 1
print(A)
и вывод:
[[0. 0. 0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 1. 1. 1. 0. 0. 0.]
[0. 0. 1. 1. 1. 1. 1. 0. 0.]
[0. 1. 1. 1. 1. 1. 1. 1. 0.]
[1. 1. 1. 1. 1. 1. 1. 1. 1.]
[0. 1. 1. 1. 1. 1. 1. 1. 0.]
[0. 0. 1. 1. 1. 1. 1. 0. 0.]
[0. 0. 0. 1. 1. 1. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0. 0. 0.]]
Я использовал генератор для построения индекса каждого и затем через l oop в первой части я нахожу центр и объявляю два разделителя (sx и dx). чем il oop перемещает разделитель, пока он не достигнет границы матрицы, и чем я просто делаю то же самое, но двигаюсь к центру.
надеюсь, это поможет.