Étant donné un tableau d'index index
et, disons, une matrice A
je veux une matrice B
avec la permutation correspondante des colonnes de A
.Utilisation de tableaux d'index sur les colonnes d'un MXDA NDArray
En Numpy je ferais ce qui suit,
>>> A = np.arange(6).reshape(2,3); A
array([[0, 1, 2],
[3, 4, 5]])
>>> index = [2,0,1]
>>> A[:,index]
array([[2, 0, 1],
[5, 3, 4]])
est-il un naturel efficace ou façon de le faire en MXNet? Les fonctions pick()
et take()
ne semblent pas fonctionner de cette manière. J'ai réussi à trouver ce qui suit, mais ce n'est pas élégant.
>>> mx.nd.take(A.T, mx.nd.array([[2],[0],[1]])).T.reshape((2,3))
[[ 2. 0. 1.]
[ 5. 3. 4.]]
<NDArray 2x3 @cpu(0)>
Enfin, pour jeter une clé dans les travaux, y at-il un moyen de le faire sur place?
Mise à jour est ici un peu plus élégant, mais sans doute pas aussi efficace (en raison de la transposition), version ci-dessus:
>>> mx.nd.take(A.T, mx.nd.array([2,0,1])).T
[[ 2. 0. 1.]
[ 5. 3. 4.]]
<NDArray 2x3 @cpu(0)>
Je suppose qu'une fois 'prendre()' 'soutient axe = 1', ou tout autre axe pour cette matière, cela aura une solution dite « élégante ». –