L oop над звездой в сетке - PullRequest
       15

L oop над звездой в сетке

0 голосов
/ 22 марта 2020

Я использую python 3, у меня есть список или сетка 9 * 9, в верхнем левом углу (0, 0) и нижнем правом углу (8, 8)

Я хочу только l oop над каждым элементом в этой сетке, который находится на расстоянии 4 или менее ячеек от центра (4, 4),

и выполните действие над этой ячейкой.

enter image description here

это мой текущий код для этого (не работает) -

for row in range(9):
    amount = row * 2 + 1
    for col in range(9):
        if amount == 0:
            continue
        print("Col- ", col + 4 -(row % 4), "Row- ", row)
        amount -= 1

1 Ответ

1 голос
/ 22 марта 2020

я преуспел в цикле только через синий квадрат, и вот мой код:

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 перемещает разделитель, пока он не достигнет границы матрицы, и чем я просто делаю то же самое, но двигаюсь к центру.

надеюсь, это поможет.

...