【发布时间】:2019-10-12 13:43:26
【问题描述】:
我正在尝试返回 2D numpy 数组的每个项目的垂直、水平和对角最近邻居列表
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]]
【问题讨论】:
-
你想用这个做什么,在什么情况下?这可能可以做到(也许通过大步走动?),但我对性能并不乐观。
-
更多的棋盘游戏,当数组索引被传递时,我试图让所有方向的 8 个邻居到达数组的边界。 @AlexanderCécile 我可以得到前 8 个,但得到
next、keeping direction和boundary checking似乎要了我的命 -
你想要 8 个邻居,但是像你的帖子那样被分解了,对吧?所以首先是邻居 1 个“单元”,然后是 2 个,等等。
-
是的,正是@AlexanderCécile,我只能得到第一个单元格,只是不知道如何得到下一个。
标签: python python-3.x list numpy