Numpy 数组,如何测试一个值是否是局部最小值
Numpy array, how to test if a value is the local minimum
我有一个二维 Numpy 数组,例如:
array([[0.87, 0.13, 0.18, 0.04, 0.79],
[0.07, 0.58, 0.84, 0.82, 0.76],
[0.12, 0.77, 0.68, 0.58, 0.8 ],
[0.43, 0.2 , 0.57, 0.91, 0.01],
[0.43, 0.74, 0.56, 0.11, 0.58]])
我想测试每个数字以评估它是否是 x*y 的 window 内的局部最小值,例如,3x3 window 会 return 这个
array([[False, False, False, True, False],
[ True, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, True],
[False, False, False, False, False]])
我想避免使用原生 python 循环,因为我的数组非常大
您可以使用 scipy.ndimage.minimum_filter
计算 2D 最小值,然后与原始值进行比较:
from scipy.ndimage import minimum_filter
mins = minimum_filter(a, mode='constant', size=(3,3), cval=np.inf)
a==mins # or np.isclose(a, mins)
输出:
array([[False, False, False, True, False],
[ True, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, True],
[False, False, False, False, False]])
中级 mins
:
array([[0.07, 0.07, 0.04, 0.04, 0.04],
[0.07, 0.07, 0.04, 0.04, 0.04],
[0.07, 0.07, 0.2 , 0.01, 0.01],
[0.12, 0.12, 0.11, 0.01, 0.01],
[0.2 , 0.2 , 0.11, 0.01, 0.01]])
我有一个二维 Numpy 数组,例如:
array([[0.87, 0.13, 0.18, 0.04, 0.79],
[0.07, 0.58, 0.84, 0.82, 0.76],
[0.12, 0.77, 0.68, 0.58, 0.8 ],
[0.43, 0.2 , 0.57, 0.91, 0.01],
[0.43, 0.74, 0.56, 0.11, 0.58]])
我想测试每个数字以评估它是否是 x*y 的 window 内的局部最小值,例如,3x3 window 会 return 这个
array([[False, False, False, True, False],
[ True, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, True],
[False, False, False, False, False]])
我想避免使用原生 python 循环,因为我的数组非常大
您可以使用 scipy.ndimage.minimum_filter
计算 2D 最小值,然后与原始值进行比较:
from scipy.ndimage import minimum_filter
mins = minimum_filter(a, mode='constant', size=(3,3), cval=np.inf)
a==mins # or np.isclose(a, mins)
输出:
array([[False, False, False, True, False],
[ True, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, True],
[False, False, False, False, False]])
中级 mins
:
array([[0.07, 0.07, 0.04, 0.04, 0.04],
[0.07, 0.07, 0.04, 0.04, 0.04],
[0.07, 0.07, 0.2 , 0.01, 0.01],
[0.12, 0.12, 0.11, 0.01, 0.01],
[0.2 , 0.2 , 0.11, 0.01, 0.01]])