Je veux découper un tableau NumPy nxn. Je veux extraire un arbitraire sélection de m lignes et colonnes de ce tableau (c'est-à-dire sans motif dans le nombre de lignes/colonnes), ce qui en fait un nouveau tableau mxm. Pour cet exemple, disons que le tableau est de 4x4 et que je veux en extraire un tableau de 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 j'ai besoin de supprimer un autre mélange de lignes/colonnes ? Et si j'ai besoin de supprimer les première et troisième lignes/lignes, en extrayant ainsi la sous-matrice [[5,7],[13,15]]
? Il peut y avoir n'importe quelle composition de rangées/lignes. J'ai lu quelque part que je devais simplement indexer mon tableau en utilisant des 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 est qu'il est difficilement lisible, mais je peux m'en accommoder. Si quelqu'un a une meilleure solution, j'aimerais bien l'entendre.
L'autre chose est que j'ai lu sur un forum que l'indexation des tableaux avec des tableaux oblige NumPy à faire une copie du tableau désiré, donc lors du traitement de grands tableaux cela pourrait devenir un problème. Pourquoi en est-il ainsi / comment ce mécanisme fonctionne-t-il ?