Étant donné un tableau, x, de forme (2, n, m) et un ensemble d'indices [i, j] où i , j < n, je cherche à obtenir une matrice de forme (2, m) où la première matrice est à l'index [0, i] et le second réseau est à l'index [1, j] . Ceci est un cas de test pour généraliser à un tableau de forme (b, n, m) et un ensemble d'index de longueur b.Vectorized Création d'un tableau 2D de matrice 3D Compte tenu tableau 1D des indices
Le choix évident pour cette opération est np.choose, mais cela agit différemment que prévu. Nous voulons appairer la ligne i du premier tableau avec la ligne j du second tableau. Cependant, lors de l'utilisation np.choose ([i, j], x), np.choose paires de la première colonne de la matrice avec index i avec la deuxième colonne de la matrice avec index j (qui peut être vu dans le code ci-dessous) pour obtenir un tableau de forme (n, m). Évidemment, cette tâche est facilement réalisée avec une boucle for, mais en raison du cas d'utilisation (dans Keras comme fonction personnalisée d'un tenseur, où l'itération est interdite), je ne peux pas le faire. Existe-t-il une manière vectorisée d'effectuer cette opération, en utilisant soit les fonctions Keras Backend, soit Numpy? Je suis actuellement en train d'utiliser "map" pour faire ceci, et je mettrai à jour avec ma propre réponse si je le découvre.
Voici un extrait de code montrant comment gère np.choose le (2, n, m) Tableau:
>>> import numpy as np
>>> x = np.random.rand(2,4,2)
>>> choices = [3,1]
>>> np.choose(choices,x)
ValueError: invalid entry in choice array
>>> np.choose([0,0],x)
#Returns an array with x[0,:,0] and x[0,:,1] in shape(4,2)
Avez-vous un code de boucle de travail? – Divakar
@Divakar Oui, mais c'est pour la tâche globale que j'effectue (trouver la sortie de probabilité maximale pour le lot "b" contenant "n" sorties softmax séparées). C'est la dernière étape de la vectorisation de cette fonction. Dois-je fournir le code pour la fonction globale, également? Cela semblait hors de propos, mais je suppose que cela donne un peu plus de contexte à ce qui se passe ici. – AGentleRose