Je veux découper un tableau NumPy nxn. Je veux extraire une sélection arbitraire de m lignes et colonnes de ce tableau (c'est-à-dire sans aucun motif dans le nombre de lignes / colonnes), ce qui en fait un nouveau tableau mxm. Pour cet exemple, disons que le tableau est 4x4 et que je veux en extraire un tableau 2x2.
Voici notre tableau:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
La ligne et les colonnes à supprimer sont les mêmes. Le cas le plus simple est celui où je veux extraire une sous-matrice 2x2 qui se trouve au début ou à la fin, c'est-à-dire:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
Mais que faire si je dois supprimer un autre mélange de lignes / colonnes? Que faire si je dois supprimer les première et troisième lignes / lignes, extrayant ainsi la sous [[5,7],[13,15]]
- matrice ? Il peut y avoir n'importe quelle composition de lignes / lignes. J'ai lu quelque part que j'ai juste besoin d'indexer mon tableau à l'aide de tableaux / listes d'indices pour les lignes et les colonnes, mais cela ne semble pas fonctionner:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
J'ai trouvé un moyen, qui est:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
Le premier problème avec ceci est qu'il est à peine lisible, même si je peux vivre avec cela. Si quelqu'un a une meilleure solution, j'aimerais certainement l'entendre.
Une autre chose est que j'ai lu sur un forum que l'indexation de tableaux avec des tableaux oblige NumPy à faire une copie du tableau souhaité, donc lors du traitement avec de grands tableaux, cela pourrait devenir un problème. Pourquoi est-ce ainsi / comment fonctionne ce mécanisme?