假设我有一个包含连续可微函数评估结果的NumPy数组,我想要找到局部最小值。由于没有噪音,所以任何值低于其所有邻居的点都符合我对局部最小值的标准。
我有以下的列表推导式,适用于二维数组,忽略边界上的潜在最小值:
然而,这个速度相当慢。我还希望能够使其适用于任意维度的情况。例如,是否有一种简单的方法可以获取数组中任意维度的点的所有邻居?或者我完全错误地解决了这个问题?我应该使用`numpy.gradient()`吗?
我有以下的列表推导式,适用于二维数组,忽略边界上的潜在最小值:
import numpy as N
def local_minima(array2d):
local_minima = [ index
for index in N.ndindex(array2d.shape)
if index[0] > 0
if index[1] > 0
if index[0] < array2d.shape[0] - 1
if index[1] < array2d.shape[1] - 1
if array2d[index] < array2d[index[0] - 1, index[1] - 1]
if array2d[index] < array2d[index[0] - 1, index[1]]
if array2d[index] < array2d[index[0] - 1, index[1] + 1]
if array2d[index] < array2d[index[0], index[1] - 1]
if array2d[index] < array2d[index[0], index[1] + 1]
if array2d[index] < array2d[index[0] + 1, index[1] - 1]
if array2d[index] < array2d[index[0] + 1, index[1]]
if array2d[index] < array2d[index[0] + 1, index[1] + 1]
]
return local_minima
然而,这个速度相当慢。我还希望能够使其适用于任意维度的情况。例如,是否有一种简单的方法可以获取数组中任意维度的点的所有邻居?或者我完全错误地解决了这个问题?我应该使用`numpy.gradient()`吗?