-1
votes

Comment itération sur la nième dimension d'un tableau numpy?

J'utilise pour concaténer mes baies numpues de forme arbitraire pour rendre mon Code Nettoyant, mais il me semble assez difficile de me démarquer sur une manière pythoneque.

Permet de prendre en compte un tableau 4 dimensions x (donc len (x.shape) = 4 ), et que l'index que je veux itérer est 2, la solution naïve que j'utilise habituellement est quelque chose comme xxx

Je cherche quelque chose de plus lisible, car il est gênant d'avoir tant de ":" et tout changement dans les dimensions de x nécessiterait une réécriture d'une partie de mon code. Quelque chose de magie comme xxx

existe une méthode numpue qui me permet d'iTerrer toute dimension arbitraire d'un tableau?


1 commentaires

L'itération sur tout axe est sous-optimale. Le compilé rapide ufuncs fournir un axis ou axes de sorte que vous n'avez pas besoin de manière explicite. Il existe des fonctions «Appliquer ...», mais ce sont des outils de commodité et non des améliorateurs de performance. Afin de réaliser beaucoup de généralité, le code Python a tendance à être assez long. Donc, votre propre 'Magic_function', réglé sur votre propre sous-ensemble d'itérations possibles est le meilleur choix.


3 Réponses :


0
votes

Une solution possible consiste à utiliser un dict ().

Ce que vous pouvez faire est: xxx


0 commentaires

0
votes

Je ne connais aucun moyen standard de le faire. Quoi qu'il en soit, votre tour est bon. Nous pouvons l'élaborer un peu et nous obtenons une implémentation de la "Fonction magique" que vous recherchez:

def magic_function(x, n):
    slices = [slice(w) for w in x.shape]
    for i in range(x.shape[n]):
        slices[n] = i
        z = x[tuple(slices)]
        yield z


0 commentaires

0
votes

Vous pouvez déplacer temporairement l'axe désiré à l'avant, puis itérer sur le tableau. Ensuite, vous déplacez l'axe de l'axe:

x = np.moveaxis(x, 2, 0)
x = np.array([my_operation(sub_x) for sub_x in x])
x = np.moveaxis(x, 0, 2)


0 commentaires