Wie finden Sie die lokalen minima der glatten mehrdimensionales array, in NumPy effizient?

Sagen, ich habe ein array in NumPy enthält Auswertungen der eine kontinuierliche differenzierbare Funktion, und ich möchten, finden Sie die lokalen minima. Es gibt keine Geräusche, so dass jeder Punkt, dessen Wert niedriger ist als die Werte, die von allen seinen Nachbarn erfüllt mein Kriterium für ein lokales minimum.

Habe ich die folgende Liste Verständnis, die arbeiten für ein zwei-dimensionales array, ignorieren von potentiellen minima auf die Grenzen:

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

Jedoch ist dies ziemlich langsam. Ich würde auch gerne diese arbeiten für eine beliebige Anzahl von Dimensionen. Zum Beispiel, gibt es einen einfachen Weg, um alle Nachbarn eines Punktes in einem array von beliebigen Dimensionen? Oder bin ich an dieses problem der falsche Weg insgesamt? Soll ich mich mit numpy.gradient() statt?

InformationsquelleAutor ptomato | 2010-10-21
Schreibe einen Kommentar