Python の 2-D numpy 配列内の特定の値の周りの「バッファー」を回復したいと考えています。アイデアは、特定の半径内に含まれるすべての値を選択し、それらをマスクすることです。次のようになります。
- 次のように、マトリックス内の「セル」を選択します
matrix[x, y]
x, y
からの距離が半径よりも小さい近傍に含まれるセルを取得しますr
処理用の大きな配列があるため (形状は 7000 x 10000)、そのための高速関数を実装したいと思います。
Python の 2-D 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.]])
これは基本的な「正方形」のマスクです。別の形のマスクが必要な場合は、簡単に作成できます。それがあなたが望んでいたものかどうかは不明です。