首页 文章

从numpy数组中获取给定半径的值[duplicate]

提问于
浏览
1

这个问题在这里已有答案:

我想在python中的2-D numpy数组中恢复给定值周围的“缓冲区” . 我们的想法是选择给定半径内包含的所有值,然后屏蔽它们 . 它会是这样的:

  • 在矩阵中选择"cell",如 matrix[x, y]

  • 获取邻域中包含的单元格,其中 x, y 的距离小于半径 r

我想实现一个快速的功能,因为我有一个大的数组进行处理(形状是7000 x 10000) .

1 回答

  • 2

    numpy切片为你开箱即用,它非常快:

    x
    Out[38]: 
    array([[1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4],
           [1, 2, 3, 4]])
    
    x[0:3,0:3] #neighbors distance=1 from (1,1)
    Out[39]: 
    array([[1, 2, 3],
           [1, 2, 3],
           [1, 2, 3]])
    

    如果你想概括一下,写一个包装器:

    def n_closest(x,n,d=1):
        return x[n[0]-d:n[0]+d+1,n[1]-d:n[1]+d+1]
    

    演示:

    y = np.diag(np.ones(10))
    
    n_closest(y,(1,3))
    Out[67]: 
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.],
           [ 1.,  0.,  0.]])
    
    n_closest(y,(2,3),d=2)
    Out[69]: 
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 1.,  0.,  0.,  0.,  0.],
           [ 0.,  1.,  0.,  0.,  0.],
           [ 0.,  0.,  1.,  0.,  0.],
           [ 0.,  0.,  0.,  1.,  0.]])
    

    这是一个基本的“方形”面具,如果你需要一个不同形状的面具,很容易制作一个 . 目前还不清楚这是不是你想要的 .

相关问题