2015-10-03 116 views
0

我得到了一个m × n维矩阵,我需要通过索引得到5个× 5维矩阵i,j。结果应该是这样的:5×5维矩阵来自m×n矩阵

res = [[arr[i-2][j-2], arr[i-2][j-1]], arr[i-2][j ], arr[i-2][j+1], arr[i-2][j+2]] 
     [arr[i-1][j-2], arr[i-1][j-1]], arr[i-1][j ], arr[i-1][j+1], arr[i-1][j+2]], 
     [arr[i ][j-2], arr[i ][j-1]], arr[i ][j ], arr[i ][j+1], arr[i ][j+2]], 
     [arr[i+1][j-2], arr[i+1][j-1]], arr[i+1][j ], arr[i+1][j+1], arr[i+1][j+2]], 
     [arr[i+2][j-2], arr[i+2][j-1]], arr[i+2][j ], arr[i+2][j+1], arr[i+2][j+2]]] 

问题是数组的索引。 i,j是随机数,所以它可以是0, 0m-1, n-1。在这种情况下,问题值如[arr[i-2][j-2][arr[i+2][j+2]必须替换为'x'。有没有干的方法来获得结果?

回答

1

我想这样的事情会做的工作:

def give_matrix(arr,i,j): 
    res = [] 
    for ii in range(i-2,i+3): 
     inner_res = [] 
     for jj in range(j-2,j+3): 
      if (ii-2<0 or ii+3>n or jj-2<0 or jj+3>n): # manage borders 
       inner_res.append('x') 
      else: 
       inner_res.append(arr[ii][jj]) 
     res.append(inner_res) 
    return res 

Livecode

+0

谢谢,但我编辑的问题。我,j可以是0.这就是问题所在。 –

+0

好吧,我更新了答案来管理边界!但你不会得到一个5 * 5的矩阵,所以...这是你想要的吗? – coincoin

+0

不,我想要的是在这种情况下,替换'x',仍然是5 * 5尺寸 –