Python 如何测量numpy数组中与局部最小值的距离?

Python 如何测量numpy数组中与局部最小值的距离?,python,scikit-learn,scikit-image,Python,Scikit Learn,Scikit Image,我用scikit.形态学在二维阵列上进行腐蚀。我还需要确定每个单元到侵蚀中确定的最小值的距离 例如: np.reshape(np.arange(1,126,step=5),[5,5]) array([[ 1, 6, 11, 16, 21], [ 26, 31, 36, 41, 46], [ 51, 56, 61, 66, 71], [ 76, 81, 86, 91, 96], [101, 106, 111

我用scikit.形态学在二维阵列上进行腐蚀。我还需要确定每个单元到侵蚀中确定的最小值的距离

例如:

np.reshape(np.arange(1,126,step=5),[5,5])
array([[  1,   6,  11,  16,  21],
       [ 26,  31,  36,  41,  46],
       [ 51,  56,  61,  66,  71],
       [ 76,  81,  86,  91,  96],
       [101, 106, 111, 116, 121]])

erosion(np.reshape(np.arange(1,126,step=5),[5,5]),selem=disk(3))
array([[ 1,  1,  1,  1,  6],
       [ 1,  1,  1,  6, 11],
       [ 1,  1,  1,  6, 11],
       [ 1,  6, 11, 16, 21],
       [26, 31, 36, 41, 46]])
现在,我要做的是返回一个数组,该数组使距离最小,如下所示:

array([[ 0,  1,  2,  3,  3],
       [ 1,  1,  2,  3,  3],
       [ 2,  2,  3,  3,  3],
       [ 3,  3,  3,  3,  3],
       [ 3,  3,  3,  3,  3]])

是否有scikit工具可以做到这一点?如果没有,有没有关于如何有效实现此结果的提示?

您可以使用,然后使用SciPy来返回这些值:

将numpy导入为np
从撇渣。形态导入侵蚀,圆盘
从scipy导入ndi图像作为ndi
输入=np.重塑(np.arange(1126,步骤=5),[5,5])
封装外形=磁盘(3)
def距离_至_最小值(值、距离_值):
d=np.inf
最小值=np.inf
对于范围内的i(len(值)):

if值[i]如何计算最后一个数组?
input:
 [[  1   6  11  16  21]
 [ 26  31  36  41  46]
 [ 51  56  61  66  71]
 [ 76  81  86  91  96]
 [101 106 111 116 121]]
footprint:
 [[0 0 0 1 0 0 0]
 [0 1 1 1 1 1 0]
 [0 1 1 1 1 1 0]
 [1 1 1 1 1 1 1]
 [0 1 1 1 1 1 0]
 [0 1 1 1 1 1 0]
 [0 0 0 1 0 0 0]]
distance_footprint:
 [[0 0 0 3 0 0 0]
 [0 4 3 2 3 4 0]
 [0 3 2 1 2 3 0]
 [3 2 1 0 1 2 3]
 [0 3 2 1 2 3 0]
 [0 4 3 2 3 4 0]
 [0 0 0 3 0 0 0]]
output:
 [[0. 1. 2. 3. 3.]
 [1. 2. 3. 3. 3.]
 [2. 3. 4. 4. 4.]
 [3. 3. 3. 3. 3.]
 [3. 3. 3. 3. 3.]]
input:
 [[  1   6  11  16  21]
 [ 26  31  36  41  46]
 [ 51  56  61  66  71]
 [ 76  81  86  91  96]
 [101 106 111 116 121]]
output:
 [[0 1 2 3 3]
 [1 2 3 3 3]
 [2 3 4 4 4]
 [3 3 3 3 3]
 [3 3 3 3 3]]