3 votes

Remodeler le tableau numpy pour contenir des blocs logiques de valeurs du tableau original

Mon google-fu m'a fait défaut !

J'ai un tableau numpy comme suit :

    0     1     2     3
  ------------------------
0 | 100   110   120   130   
1 | 140   150   160   170
2 | 180   190   200   210
3 | 220   230   240   250
4 | 260   270   280   290
5 | 300   310   320   330
6 | 340   350   360   370
7 | 380   390   400   410
8 | 420   430   440   450

dont la forme est (9, 4) . Je veux remodeler le tableau ci-dessus pour obtenir le tableau suivant (6, 6) le tableau :

    0     1     2     3     4     5
  -------------------------------------
0 | 100   110 | 140   150 | 180   190
1 | 120   130 | 160   170 | 200   210
  -------------------------------------
2 | 220   230 | 260   270 | 300   310
3 | 240   250 | 280   290 | 320   330
  -------------------------------------
4 | 340   350 | 380   390 | 420   430
5 | 360   370 | 400   410 | 440   450

Je suis capable de le faire avec 2 for les boucles et certaines conditions. Existe-t-il un meilleur moyen d'obtenir le même résultat en utilisant numpy.reshape en une seule ligne de code ?

Merci d'avance.

3voto

Nils Werner Points 3392

En fait, c'est un (3, 3) de (2, 2) les tableaux, il faut donc d'abord les remodeler dans une (3, 3, 2, 2) le tableau.

Ensuite, transposez-le de manière à ce que les axes soient corrects pour le recombiner en une (6, 6) le tableau :

a.reshape(3, 3, 2, 2).transpose([0,2,1,3]).reshape(6,6)

0voto

Yibo Yang Points 420

J'ai fait quelque chose de similaire mais peut-être plus intuitif :

a = np.arange(36).reshape([9,4])
>>>
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23],
       [24, 25, 26, 27],
       [28, 29, 30, 31],
       [32, 33, 34, 35]])

b = np.hstack(np.column_stack(a.reshape([3,3,2,2])))
>>>
array([[ 0,  1,  4,  5,  8,  9],
       [ 2,  3,  6,  7, 10, 11],
       [12, 13, 16, 17, 20, 21],
       [14, 15, 18, 19, 22, 23],
       [24, 25, 28, 29, 32, 33],
       [26, 27, 30, 31, 34, 35]])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X