Comment trouver les minima locaux de la lisse d'un tableau multidimensionnel dans NumPy efficacement?

Dire que j'ai un tableau NumPy contenant des évaluations continues de fonction dérivable, et je veux trouver les minima locaux. Il n'y a pas de bruit, de sorte que chaque point dont la valeur est inférieure aux valeurs de l'ensemble de ses voisins répond à mes critère d'un minimum local.

J'ai la liste suivante de compréhension de ce qui fonctionne pour un tableau à deux dimensions, en ignorant le potentiel des minima sur les limites:

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

Cependant, c'est assez lent. Je tiens également à obtenir que cela fonctionne pour un nombre quelconque de dimensions. Par exemple, est-il un moyen facile d'obtenir tous les voisins d'un point dans un tableau de toutes les dimensions? Ou suis-je aborder ce problème à l'envers? Dois-je utiliser numpy.gradient() à la place?

Trouver le mondial maxima: stackoverflow.com/questions/3584243/...

OriginalL'auteur ptomato | 2010-10-21