我想遍历我的2D numpy数组并检查它的所有直接邻居。 如果我做一个numpy的阵列,像这样:如何切割2D numpy阵列以获得其直接邻居?
tilemap = np.arange(16).reshape(4,4)
它会是这个样子:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
,我为了帮助我找到每个点的邻居在数组类似的循环此:
import numpy as np
mapwidth = 4
mapheight = 4
tilemap = np.arange(mapwidth * mapheight).reshape(mapwidth, mapheight)
row = 0
for i in tilemap:
count = 0
for j in i:
column = j % mapwidth
check = tilemap[row-1:row+2, column-1:column+2]
print(check)
count += 1
if count % mapheight == 0:
row += 1
然而,我这样做时,我不会找到与值0,1,2,3,4,8阵列中的点的任何邻居,和12我明白为什么本是th电子情况。例如,如果我取8的值,它的索引为[2,0]。第1行将导致-1,这与本例中的索引3相同。行+ 2是2.切片2:3将导致什么也没有,因为2和3之间没有任何东西。
无论如何,我要找的结果是这样的(对于值8):
[[4 5]
[ 8 9]
[12 13]]
我知道我可以通过堆积一些if语句来实现这一点,但我不知道是否有更好的方法来处理这个问题。
谢谢你的时间。
(对于那些想知道这一点的人): 邻居例如值11实际上像我想要的那样返回,没有任何错误。它返回:
[[6 7]
[10 11]
[14 15]]
编辑:
我应该还提到我尝试这样做:
check = np.take(tilemap, tilemap[row-1:row+2, column-1:column+2], mode = 'clip')
但这并没有工作。
一个特技将取代'行1'与''行向和类似地对于'column' –
'分钟(MAX(0,行-1),MAX_INDEX)' –
@ TadhgMcDonald-Jensen你不需要在右侧切断;当分割太大的上限时会优雅地处理。 –