【问题标题】:Python, Numpy. Find values in 2d array and replace neighbors with 1蟒蛇,麻木。在二维数组中查找值并用 1 替换邻居
【发布时间】:2021-04-19 09:59:40
【问题描述】:

我有一个包含 0 和 1 的 10x10 数组。

我想:

  1. 找到每个值为 1 的单元格的位置。

  2. 用 1 替换所有邻居。neighbors= 任何单元格到 n=1 距离(也是对角线)。 示例:

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

输出:

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] 

但这不适用于边缘

谢谢

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    如果您不介意使用scipy,2D 卷积将很快解决问题:

    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)
    

    【讨论】:

      猜你喜欢
      • 2010-10-13
      • 2021-11-06
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      相关资源
      最近更新 更多