【问题标题】:5×5 dimensional matrix from m×n matrix来自 m×n 矩阵的 5×5 维矩阵
【发布时间】:2015-10-03 18:59:40
【问题描述】:

我有一个 m×n 维矩阵,我需要通过索引ij 获得 5×5 维矩阵。结果应该是这样的:

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]]]

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

【问题讨论】:

    标签: python algorithm list dry sublist


    【解决方案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

    【讨论】:

    • 谢谢,但我编辑了这个问题。 i, j 可以为 0。这就是问题所在。
    • 好的,我更新了管理边界的答案!但是你不会得到一个 5*5 的矩阵,所以......这是你想要的吗?
    • 不,在这种情况下,我想要的是用“x”替换并且仍然是 5*5 尺寸
    • 好吧,你可以在这方面做一些工作......而且我发现糟糕的设计......一个混合了价值观的角色???你为什么需要那个?那是作业吗? ://
    • 是的,这是青蛙和苍蝇的游戏。站在 i,j 上的飞行应该只看到 5*5 部分的基质。