Skip to main content
 首页 » 编程设计

python之在矩阵中查找邻居

2025年05月04日16davidwang456

这是一个 7x7 矩阵:

11  21  31  41  51  61  71 
12  22  32  42  52  62  72 
13  23  33  43  53  63  73 
14  24  34  44  54  64  74 
15  25  35  45  55  65  75 
16  26  36  46  56  66  76 
17  27  37  47  57  67  77 

数字 11, 21, 33 ... 是位置的值。 如果给定半径,行数和列数,如何找到邻居?

例如,函数 neighbors(radius = 1, rowNumber = 3, columnNumber = 3) 应该返回一个矩阵:

22  32  42 
23  33  43 
24  34  44 

函数 neighbors(radius = 2, rowNumber = 3, columnNumber = 3) 应该返回一个矩阵:

11  21  31  41  51 
12  22  32  42  52 
13  23  33  43  53 
14  24  34  44  54 
15  25  35  45  55 

当邻居超出边界时,其值应为0。 例如,函数 neighbors(radius = 2, rowNumber = 1, columnNumber = 1) 应该返回一个矩阵

0   0   0   0   0 
0   0   0   0   0 
0   0   11  21  31 
0   0   12  22  32 
0   0   13  23  33 

我已经为这个问题思考了 3 天,但我仍然无法为它制定解决方案。

请您参考如下方法:

这在其他语言中可能很难,但在 Python 中这很容易。这是一个可以完成您所要求的功能:

def neighbors(radius, row_number, column_number): 
     return [[a[i][j] if  i >= 0 and i < len(a) and j >= 0 and j < len(a[0]) else 0 
                for j in range(column_number-1-radius, column_number+radius)] 
                    for i in range(row_number-1-radius, row_number+radius)] 

这是一个二维列表:

 a = [[ 11,  21,  31,  41,  51,  61,  71], 
      [ 12,  22,  32,  42,  52,  62,  72], 
      [ 13,  23,  33,  43,  53,  63,  73], 
      [ 14,  24,  34,  44,  54,  64,  74], 
      [ 15,  25,  35,  45,  55,  65,  75], 
      [ 16,  26,  36,  46,  56,  66,  76], 
      [ 17,  27,  37,  47,  57,  67,  77]] 

参见 List comprehensions .

更新了解决方案中缺少的“和” - 请查看