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

时间:2013-08-09 17:33:49

标签: python arrays numpy mask spatial-query

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

  1. 在矩阵中选择“单元格”,例如matrix[x, y]
  2. 获取邻域中包含的单元格,x, y的距离小于半径r
  3. 我想实现一个快速功能,因为我有一个大的数组进行处理(形状是7000 x 10000)。

1 个答案:

答案 0 :(得分: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.]])

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