Python 在网格中的周围单元格中查找最小值
我目前正在使用Python中由列表表示的网格。我有一个起始单元格,比如在Python 在网格中的周围单元格中查找最小值,python,list,Python,List,我目前正在使用Python中由列表表示的网格。我有一个起始单元格,比如在网格[x][y]上 每个坐标都有一个与之关联的特定值:grid[x][y]。val=20 我想检查所有周围的单元格,看看哪个单元格的值低于初始单元格,哪个单元格的值是所有周围单元格中最低的 我曾考虑过用一些if语句手动检查每个单元格grid[x][y+1]、grid[x+1][y]等,但我觉得必须有更好的方法 我应该如何处理这个问题?通常,您需要设置一个配对列表 deltas = [(-1, -1), (-1, 0), (-
网格[x][y]
上
每个坐标都有一个与之关联的特定值:grid[x][y]。val=20
我想检查所有周围的单元格,看看哪个单元格的值低于初始单元格,哪个单元格的值是所有周围单元格中最低的
我曾考虑过用一些if语句手动检查每个单元格grid[x][y+1]、grid[x+1][y]等,但我觉得必须有更好的方法
我应该如何处理这个问题?通常,您需要设置一个配对列表
deltas = [(-1, -1), (-1, 0), (-1, 1),
( 0, -1), ( 0, 1),
( 1, -1), ( 1, 0), ( 1, 1)]
并在其上循环:
for dx, dy in deltas:
grid[x + dx][y + dy]
此函数应实现以下功能:
def min_surround(grid, x, y):
return min(grid[x+dx][y+dy].val for dx in range(-1, 2) for dy in range(-1, 2))
如果.val值存储在numpy数组中,那么查找区域的最小值就很简单了
import numpy as np
x = np.random.normal(size=[6,6])
z = np.min(x[0:3,2:5])
print x
print z
导致
[[-0.40201157 0.46485353 1.1052583 1.11755495 -1.83926315 1.52196255]
[-1.33033205 -0.12079264 0.07514305 -0.54083923 -1.32646675 -0.678275 ]
[-0.88322977 1.4105751 0.39753243 -0.89098143 0.95593871 -0.71951623]
[ 0.49596028 0.21729938 -1.50148048 1.94903521 1.14637429 -1.10754165]
[ 0.13870651 -2.10966853 0.4137035 0.3555691 0.36410423 0.3190395 ]
[ 1.00280868 0.61461297 -2.23789591 0.54246954 2.03222197 1.05972663]]
-1.83926314797
请记住检查边缘情况——例如,如果x==0,则不希望检查x左侧不存在的单元格。此解决方案使用压缩代码的生成器表达式,并检查边界:
def nearest_lowest(grid,x,y):
deltas = [(-1, -1), (-1, 0), (-1, 1),
( 0, -1), ( 0, 1),
( 1, -1), ( 1, 0), ( 1, 1)]
return min(grid[x+dx][y+dy].val for (dx, dy) in deltas \
if 0 <= x+dx < 100 and 0 <= y+dy < 100)
def最近_最低(网格,x,y):
三角洲=[(-1,-1),(-1,0),(-1,1),
( 0, -1), ( 0, 1),
( 1, -1), ( 1, 0), ( 1, 1)]
返回Delta中(dx,dy)的最小值(网格[x+dx][y+dy])\
如果0