Maison >développement back-end >Tutoriel Python >Comment extraire efficacement des sous-tableaux avec Strides dans NumPy ?
Extraction de sous-tableaux avec des foulées dans les tableaux Numpy
Considérez un tableau Python Numpy a :
a = numpy.array([1,2,3,4,5,6,7,8,9,10,11])
Nous visons à extraire des sous-tableaux de longueur 5 avec une foulée de 3. Il en résulte une matrice avec le suivant contenu :
numpy.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
Implémentation plus propre
Bien qu'une approche en boucle for soit viable, Numpy fournit des méthodes plus efficaces :
Approche 1 : Diffusion
Cette approche profite de diffusion :
def broadcasting_app(a, L, S ): # Window len = L, Stride len/stepsize = S nrows = ((a.size-L)//S)+1 return a[S*np.arange(nrows)[:,None] + np.arange(L)]
Approche 2 : Optimisation des foulées
Cette méthode utilise les foulées efficaces de Numpy :
def strided_app(a, L, S ): # Window len = L, Stride len/stepsize = S nrows = ((a.size-L)//S)+1 n = a.strides[0] return np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S*n,n))
Exemple d'utilisation :
a = numpy.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) broadcasting_app(a, L = 5, S = 3) # [[ 1 2 3 4 5] # [ 4 5 6 7 8] # [ 7 8 9 10 11]] strided_app(a, L = 5, S = 3) # [[ 1 2 3 4 5] # [ 4 5 6 7 8] # [ 7 8 9 10 11]]
Ces approches offrent des solutions plus efficaces et optimisées pour extraire des sous-tableaux avec des foulées dans les tableaux Numpy.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!