NumPyに連続微分可能関数の評価を含む配列があり、極小値を見つけたいとします。ノイズがないため、すべての隣接する値よりも値が低いすべての点が、極小値の基準を満たしています。
境界上の潜在的な最小値を無視して、2次元配列で機能する次のリスト内包表記があります。
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()
代わりに使用する必要がありますか?