如何将Numpy数组切割到边界?

sda*_*das 8 python numpy

我在一个项目中使用Numpy和Python,其中2D地图由以下表示ndarray:

map = [[1,2,3,4,5],
       [2,3,4,2,3],
       [2,2,2,1,2],
       [3,2,1,2,3],
       [4,6,5,7,4]]
MAP_WIDTH = 5, MAP_HEIGHT = 5
Run Code Online (Sandbox Code Playgroud)

一个对象有一个元组位置:

actor.location = (3,3)
Run Code Online (Sandbox Code Playgroud)

和视图范围:

actor.range = 2
Run Code Online (Sandbox Code Playgroud)

如何编写函数actor.view_map(map),以便地图返回演员位置周围的区域,直到范围.例如(使用上面的地图),

range = 1
location = (3, 2)
=>
[[2,3,4],
 [3,4,2],
 [2,2,1]]
Run Code Online (Sandbox Code Playgroud)

但如果演员的范围延伸得太远,我希望地图填充-1:

range = 1
location = (1,1)
[[-1,-1,-1],
 [-1, 1, 2],
 [-1, 2, 3]]
Run Code Online (Sandbox Code Playgroud)

最简单的情况是0的范围,它返回当前的方块:

range = 0
location = (1, 2)
[[2]]
Run Code Online (Sandbox Code Playgroud)

如何将地图切割到某个边界?

sda*_*das 4

所以,多亏了 Joe Kington,我在地图周围添加了一个边框(用 -1 填充)。

这是我的做法,但这可能不是很 Pythonic,因为我刚刚开始使用语言/库:

map = numpy.random.randint(10, size=(2 * World.MAP_WIDTH, 2 * World.MAP_HEIGHT))
map[0 : World.MAP_WIDTH / 4, :] = -1
map[7 * World.MAP_WIDTH / 4 : 2 * World.MAP_WIDTH, :] = -1
map[:, 0 : World.MAP_HEIGHT / 4] = -1
map[:, 7 * World.MAP_HEIGHT / 4 : 2 * World.MAP_WIDTH] = -1
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用函数“np.pad”在地图周围添加边框:“np.pad(map, 1, mode='constant',constant_values=-1)” (3认同)