Python,Numpy。在二维数组中查找值并将相邻值替换为1

Python,Numpy。在二维数组中查找值并将相邻值替换为1,python,arrays,numpy,Python,Arrays,Numpy,我有一个10x10阵列,有0和1 我想: 用值1查找每个单元格的位置 将所有邻居替换为1。邻居=距离n=1的任意单元格(也是对角线)。 例如: 输出: array([[1, 1, 1, 1, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]) 我正在尝试查找索引,但不起作用: a=np.where(a==1)+1 在其他帖子中,我还尝试使用

我有一个10x10阵列,有0和1

我想:

  • 用值1查找每个单元格的位置

  • 将所有邻居替换为1。邻居=距离n=1的任意单元格(也是对角线)。 例如:

  • 输出:

    array([[1, 1, 1, 1, 0],
           [1, 1, 1, 1, 0],
           [1, 1, 1, 1, 0],
           [1, 1, 1, 1, 1],
           [1, 1, 1, 1, 1]])
    
    我正在尝试查找索引,但不起作用:

    a=np.where(a==1)+1
    
    在其他帖子中,我还尝试使用以下函数获取邻居:

    def n_closest(x,n,d=1):
        return x[n[0]-d:n[0]+d+1,n[1]-d:n[1]+d+1] 
    
    但这对边缘不起作用


    谢谢如果您不介意使用
    scipy
    ,二维卷积将快速解决问题:

    import numpy as np
    from scipy import signal
    
    # Input array
    X = np.array([[0, 1, 0, 0, 0],
                  [0, 0, 0, 0, 0],
                  [0, 0, 1, 0, 0],
                  [1, 0, 0, 0, 0],
                  [0, 0, 0, 1, 1]])
    
    # We apply a 2D convolution with a 3x3 kernel and we check which value are bigger than 0.
    R = (signal.convolve2d(X,np.ones((3,3)),mode='same')>0).astype(int)
    # R = array([[1, 1, 1, 0, 0],
    #            [1, 1, 1, 1, 0],
    #            [1, 1, 1, 1, 0],
    #            [1, 1, 1, 1, 1],
    #            [1, 1, 1, 1, 1]])  
    
    # Finally we extract the index 
    x,y = np.where(R)
    
    import numpy as np
    from scipy import signal
    
    # Input array
    X = np.array([[0, 1, 0, 0, 0],
                  [0, 0, 0, 0, 0],
                  [0, 0, 1, 0, 0],
                  [1, 0, 0, 0, 0],
                  [0, 0, 0, 1, 1]])
    
    # We apply a 2D convolution with a 3x3 kernel and we check which value are bigger than 0.
    R = (signal.convolve2d(X,np.ones((3,3)),mode='same')>0).astype(int)
    # R = array([[1, 1, 1, 0, 0],
    #            [1, 1, 1, 1, 0],
    #            [1, 1, 1, 1, 0],
    #            [1, 1, 1, 1, 1],
    #            [1, 1, 1, 1, 1]])  
    
    # Finally we extract the index 
    x,y = np.where(R)