2012-11-08 4 views
3

J'essaie d'extraire un sous-ensemble d'un tableau numy y spécifié par un ensemble d'indices contenus dans x, tout en laissant certains index de y libres. Pour un exemple concret. Soit y ont la forme (10,10,10,3) tandis que x a la forme (7,7,3). La dernière dimension de x correspond aux indices info les trois premières dimensions de y. C'est, je voudrais une opération de découpage efficace avec le même résultat que celle-ci:Slice numpy array avec un autre tableau

for i in x.shape[0]: 
    for j in x.shape[1]: 
     z[i,j,:] = y[x[i,j,0],x[i,j,1],x[i,j,2],:] 

Idéalement, la réponse travaillerais quel que soit le nombre de dimensions de x.

En général, y serait N+1 -dimensionnelle, avec la forme (...,N), tandis que x serait Q+1 avec la forme (...,N) -dimensionnelle, et le résultat aurait la même forme que x.

La motivation pour cela est l'extraction d'un sous-ensemble de vecteurs à partir d'un champ de vecteurs.

Répondre

4

Cela devrait fonctionner assez bien:

y[x[..., 0], x[..., 1], x[..., 2]] 

En général:

y[tuple(np.rollaxis(x, -1))] 
+0

La première version fait ce que je veux, mais seulement lorsque le nombre de dimensions de 'y' est connu à l'avance. La seconde est générale, mais semble malheureusement très lente (20 fois plus lente dans l'un de mes tests). – amaurea

Questions connexes