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?
OriginalL'auteur ptomato | 2010-10-21
Vous devez vous connecter pour publier un commentaire.
L'emplacement des minima locaux peuvent être trouvés pour une matrice de dimension arbitraire
à l'aide de Ivan's detect_peaks fonction, avec des modifications mineures:
que vous pouvez utiliser comme ceci:
Cela dit les minima se produisent à des indices [0,0,3], [0,4,0], [1,1,1] et [1,3,3]:
OriginalL'auteur unutbu
Essayez ceci pour la 2D:
Revenir un array2d tableau avec des Vrai/Faux, où les minima locaux (quatre voisins) sont situés.
&
's au lieu de&&
's, et nécessite des parenthèses autour de l'comparaisons, mais il va à trente fois plus rapide que mon original.vous avez raison, maintenant corrigé, merci.
ce qui se passe ici?
ses comparant un élément dans le tableau les éléments ci-dessus, ci-dessous, à gauche et à droite. si sa plus petite de toutes, elle remplace l'élément à "True" pour laisser vous savez qu'il y est un minimum local.
OriginalL'auteur eumiro