Работа с индексами элементов 2D-массива в python - PullRequest
0 голосов
/ 14 июля 2020

У меня есть двумерный логический массив, и я пытаюсь установить для элементов, окруженных true, значение «true»:

Например:

[[T,T,T,F],[T,F,T,T],[T,T,T,T]]

Будет:

[[T,T,T,F],[T,T,T,T],[T,T,T,T]]

false во втором необработанном и втором столбце будет true.

Так что я думаю, мне понадобится индекс для каждого элемента для сравнения, это кажется простым на других языках, например java, но мне нужно сделать это в python.

Я пытался сделать это в for l oop как:

For i in Range(len(s)) :
    If s[i+1] 
    If s[i-1] 

И, конечно же , попробовал с двумя петлями for. Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы делаете это так же, как на Java или на любом другом языке. Вот одна возможная реализация, которая не использует numpy и может быть более удобной для новичков. Вы не указали, включает ли он углы, поэтому учитываются только те, которые непосредственно примыкают.

for row_index in range(len(s)):                 # Loops through each row in the array
    for col_index in range(len(s[row_index])):  # Loops through each column in the row
        # Make sure you check for out of bounds
        if ((row_index > 0 and s[row_index - 1][col_index]) and
            (row_index < len(s)-1 and s[row_index + 1][col_index]) and
            (col_index > 0 and s[row_index][col_index - 1]) and
            (col_index < len(s[0])-1 and s[row_index][col_index + 1])):
            s[row_index][col_index] = True
1 голос
/ 14 июля 2020
import numpy as np

T = True
F = False

a = np.array([[T,T,T,F],[T,F,T,T],[T,T,T,T]])

a[1:-1, 1:-1] |= (a[:-2,  :-2] & a[:-2, 1:-1] & a[:-2,  2:] &
                  a[1:-1, :-2]                & a[1:-1, 2:] &
                  a[2:,   :-2] & a[2:,  1:-1] & a[2:,   2:])

print(a)

дает:

[[ True  True  True False]
 [ True  True  True  True]
 [ True  True  True  True]]

Или, если под словом «окруженный» вы просто подразумеваете четыре элемента, которые непосредственно смежны (не смежные по диагонали), тогда выражение становится:

a[1:-1, 1:-1] |= (               a[ :-2, 1:-1]               &              
                  a[1:-1, :-2]                 & a[1:-1, 2:] &
                                 a[2:,   1:-1]              )

, возможно, лучше записать как:

a[1:-1, 1:-1] |= (a[:-2, 1:-1] & a[1:-1, :-2] & a[1:-1, 2:] & a[2:, 1:-1])

И результат для этого конкретного примера массива такой же, как и раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...