我想在 python 的二维 numpy 数组中围绕给定值恢复“缓冲区”。这个想法是选择给定半径内包含的所有值,然后将它们屏蔽。它会是这样的:
- 在矩阵中选择一个“单元格”,例如
matrix[x, y]
- 获取邻域中包含的单元格,其中距离
x, y
小于半径r
我想为此实现一个快速函数,因为我有一个大数组进行处理(形状为 7000 x 10000)。
我想在 python 的二维 numpy 数组中围绕给定值恢复“缓冲区”。这个想法是选择给定半径内包含的所有值,然后将它们屏蔽。它会是这样的:
matrix[x, y]
x, y
小于半径r
我想为此实现一个快速函数,因为我有一个大数组进行处理(形状为 7000 x 10000)。
numpy slicing 为您开箱即用,而且速度非常快:
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.]])
这是一个基本的“方形”面具,如果您需要不同形状的面具,很容易制作。目前还不清楚这是否是你想要的。