Получение списка списка ближайших соседей в границах - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь вернуть список списка ближайших соседей по вертикали, горизонтали и диагонали для каждого элемента двумерного массива

import numpy as np
import copy
tilemap = np.arange(99).reshape(11, 9)
print(tilemap)

def get_neighbor(pos, array):
    x = copy.deepcopy(pos[0])
    y = copy.deepcopy(pos[1])
    grid = copy.deepcopy(array)
    split = []
    split.append([grid[y-1][x-1]])
    split.append([grid[y-1][x]])
    split.append([grid[y-1][x+1]])
    split.append([grid[y][x - 1]])
    split.append([grid[y][x+1]])
    split.append([grid[y+1][x-1]])
    split.append([grid[y+1][x]])
    split.append([grid[y+1][x+1]])
    print("\n Neighbors of ITEM[{}]\n {}".format(grid[y][x],split))

cordinates = [5, 6]
get_neighbor(pos=cordinates, array=tilemap)

я бы хотел получить такой список: first item = 0

[[1],[12],[13],
 [1,2], [12,24],[13,26],
 [1,2,3], [12,24,36], [13,26,39]....

, пока он полностью не достигнет границ, затем переходит к second item = 1 и продолжает добавляться в список. если рядом есть сосед, его тоже следует добавить ..

МОЙ РЕЗУЛЬТАТ

[[ 0  1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24 25 26]
 [27 28 29 30 31 32 33 34 35]
 [36 37 38 39 40 41 42 43 44]
 [45 46 47 48 49 50 51 52 53]
 [54 55 56 57 58 59 60 61 62]
 [63 64 65 66 67 68 69 70 71]
 [72 73 74 75 76 77 78 79 80]
 [81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98]]

 Neighbors of ITEM[59]
 [[49], [50], [51], [58], [60], [67], [68], [69]]

1 Ответ

0 голосов
/ 15 октября 2019

Хорошо, а как насчет использования такой функции? Для этого требуется массив, целевой индекс и «радиус» включаемых элементов.

def get_idx_adj(arr, idx, radius):
    num_rows, num_cols = arr.shape
    idx_row, idx_col = idx
    slice_1 = np.s_[max(0, idx_row - radius):min(num_rows, idx_row + radius + 1)]
    slice_2 = np.s_[max(0, idx_col - radius):min(num_cols, idx_col + radius + 1)]
    return arr[slice_1, slice_2]

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

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