Transposition d'une matrice

En mathématiques, une matrice est un tableau de nombres. La transposition d'une matrice est l'opération qui, concrètement, échange le rôle des lignes et des colonnes. On l'utilise par exemple pour multiplier deux matrices et, en infographie, pour des transformations d'images.

Considérons par exemple la matrice ci-dessous :

\[\begin{bmatrix} 1 & \mathbf{2} & 3 & 4\\ 5 & \mathbf{6} & 7 & 8\\ 9 & \mathbf{10} & 11 & 12\\ \end{bmatrix}\]

Sa version transposée est :

\[\begin{bmatrix} 1 & 5 & 9\\ \mathbf{2} & \mathbf{6} & \mathbf{10}\\ 3 & 7 & 11\\ 4 & 8 & 12\\ \end{bmatrix}\]

La colonne d'indice \(1\) est devenue la ligne d'indice \(1\).

On représente les matrices par des listes de listes Python contenant toutes le même nombre d'éléments.

On souhaite écrire une fonction transposition qui renvoie la matrice obtenue en transposant une matrice nommée matrice passée en paramètre. Pour ce faire on écrira tout d'abord les fonctions telles que :

  • hauteur(matrice) renvoie le nombre de lignes de matrice ;
  • largeur(matrice) renvoie le nombre de colonnes de matrice ;
  • ligne(matrice, i) renvoie la ligne d'indice i de matrice sous forme d'une liste ;
  • colonne(matrice, j) renvoie la colonne d'indice j de matrice sous forme d'une liste.

Les questions ci-dessous demandent d'écrire chacune de ces fonctions. Elles sont toutes indépendantes. Il est possible, à partir de la question 2., d'utiliser les fonctions demandées dans les questions précédentes.

On garantit que toutes les matrices passées en paramètres aux différentes fonctions comptent au moins une ligne et une colonne.

Fonction hauteur

La fonction hauteur renvoie le nombre de lignes de la matrice passée en paramètre.

Exemples
>>> matrice = [
...     [0, 1, 1, 1],
...     [1, 0, 1, 0],
...     [0, 0, 0, 1],
... ]
>>> hauteur(matrice)
3
>>> matrice = [
...     ['a', 'b', 'c'],
...     ['d', 'e', 'f'],
...     ['g', 'h', 'i'],
...     ['j', 'k', 'l']
... ]
>>> hauteur(matrice)
4

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sobcdufvg/ly napSr1me(P2=:twkih)050f0v0B0p0E0l0b0n0e0l0p0b0b0z010B0E0q010406050b0g0u0u0p0s0m040r0c0l0g0X0c0o050k0(0*0,0.0$0q040`1105140k1416110$0f0E0i0P0R0T0V0F0E0j0F0l1k0F0B0!050K0d0l0v1f0S0U011j1l1n1l0B1t1v1r0B0d0c0f0.1s0s120B0F0P0;0b0q0p0o0V0y011x1h010h0M0v0o0p0u0v1r1V1X1$1z1)1v1,1.0!0a0n0x0s0c0q0c0b0E0@0o0n0I1T0s0s0v0e260`1;0o120k1R2j0B1P1O1Q0f1?0V1n0o1+231r1c1e0Q1y2t0E2v0o1L1d1r0q2c122h2j2N0%1W272B1%2G0s0+0l0!0t2g2R0#2Q1=2T1z2V2X0!0y2#1X2j2K0v2j2z2m0f2q2s010e1L1/122_152L2(2i2:372 0I2M2R2}0D0!0I0h383c2)1g1z0C0!0n3j362}0o0h0!0F0p0?0v0g0s3r2h2}0Z040w3D3d2*0V0o0!0+2n0E0e0v3J3l2C013G0G0A3j060n3%3q3E3L013f042c0B3B0_0{2$3)3K3m3M0d0!1_3U2S3`3X0!3I3?2;3s3+3N043P0s3R3T45373*413Y3#0`3a2@13350k332k2{0`2n2m1K1M2m0p1u4n4q1d2%4q0J0L0N04.
Fonction largeur

La fonction largeur renvoie le nombre de colonnes de la matrice passée en paramètre.

Exemples
>>> matrice = [
...     [0, 1, 1, 1],
...     [1, 0, 1, 0],
...     [0, 0, 0, 1],
... ]
>>> largeur(matrice)
4
>>> matrice = [
...     ['a', 'b', 'c'],
...     ['d', 'e', 'f'],
...     ['g', 'h', 'i'],
...     ['j', 'k', 'l']
... ]
>>> largeur(matrice)
3

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sobcdufvg/0ly napSr1me(P2=:twki][h)050f0w0C0q0F0m0b0o0e0m0q0b0b0A010C0F0r010406050b0g0v0v0q0t0n040s0c0m0g0!0c0p050k0+0-0/0;0)0r040}1405170k1719140)0f0F0i0S0U0W0Y0I0F0j0I0m1n0I0C0%050N0d0m0w1i0V0X011m1o1q1o0C1w1y1u0C0d0c0f0;1v0t150C0I0S0@0b0r0q0p0Y0z011A1k010h0P0w0p0q0v0w1u1Y1!1)1C1,1y1/1;0%0a0o0y0t0c0r0c0b0F0`0p0o0L1W0t0t0w0e290}1@0p150k1U2m0C1S1R1T0f1_0Y1q0p1.261u1f1h0T1B2w0F2y0p1O1g1u0r2f152k2m2Q0*1Z2a2E1*2J0t0.0m0%0u2j2U0(2T1^2W1C2Y2!0%0z2(1!2m2N0w2m2C2p0f2t2v010e1O1=152|182O2+2l2?3a320L2P2U300E0%0L0h3b3f2,1j1C0D0%0o3m39300p0h0%0U0t0j0w0g0t3u2k300$040x3G3g2-0Y0p0%0.2q0F0e0w3M3o2F013J0J0B3m060o3*3t3H3O013i042f0C3E0|0~2)3,3N3p3P0d3z1.3X2V3}3!0%3L3_2@3v3.3Q043S0t3U3W483a3-443J0H42300v0F0%0l4o3.3J0G0J3(0}3d2`16380k362n2~0}2q2p1N1P2p0q1x4C4F1g2*4F0M0O0Q04.
Fonction ligne

La fonction ligne prend en paramètre une liste de listes matrice ainsi qu'un indice i et renvoie la ligne d'indice i de matrice sous forme d'une liste.

On garantit que i est un indice valide.

Exemples
>>> matrice = [
...     [0, 1, 1, 1],
...     [1, 0, 1, 0],
...     [0, 0, 0, 1],
... ]
>>> ligne(matrice, 0)
[0, 1, 1, 1]
>>> matrice = [
...     ['a', 'b', 'c'],
...     ['d', 'e', 'f'],
...     ['g', 'h', 'i'],
...     ['j', 'k', 'l']
... ]
>>> ligne(matrice, 3)
['j', 'k', 'l']

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sobcdufvg/ly napSr1me,(P2=:twki][h)050f0v0C0p0F0l0b0n0e0l0p0b0b0A010C0F0q010406050b0g0u0u0p0s0m040r0c0l0g0!0c0o050k0+0-0/0;0)0q040}1405170k1719140)0f0F0i0S0U0W0Y0I0F0j0I0l1n0I0C0%050N0d0l0v1i0V0X011m1o1q1o0C1w1y1u0C0d0c0f0;1v0s150C0I0S0@0b0q0p0o0Y0z011A1k010h0P0v0o0p0u0v1u1Y1!1)1C1,1y1/1;0%0a0n0y0s0c0q0c0b0F0`0o0n0L1W0s0s0v0e290}1@0o150k1U2m0C1S1R1T0f1_0Y1q0o1.261u1f1h0T1B2w0F2y0o1O1g1u0q2f152k2m2Q0*1Z2a2E1*2J0s0.0l0%0t2j2U0(2T1^2W1C2Y2!0%0z2(1!2m2N0v2m2C2p0f2t2v010e1O1=152|182O2+2l2?3a320L2P2U300E0%0L0h3b3f2,1j1C0D0%0n3m39300o0h0%1G2y3u2k300$040x3C3g2-0Y0o0%0.2q0F0e0v3I3o2F013F0w3m3t3D3K013M040F3T2V3p0Y3F0J0B3m060n3@3!3J3-013i042f0C0g0s0|0~2)3_3U2X3N0p3P3R3+3E0%0H4d3$3(3*442@3v3$3F0G3=0}3d2`16380k362n2~0}2q2p1N1P2p0p1x4u4x1g2*4x0M0O0Q04.
Fonction colonne

La fonction colonne prend en paramètre une liste de listes matrice ainsi qu'un indice j et renvoie la colonne d'indice j de matrice sous forme d'une liste.

On garantit que j est un indice valide.

Exemples
>>> matrice = [
...     [0, 1, 1, 1],
...     [1, 0, 1, 0],
...     [0, 0, 0, 1],
... ]
>>> colonne(matrice, 1)
[1, 0, 0]
>>> matrice = [
...     ['a', 'b', 'c'],
...     ['d', 'e', 'f'],
...     ['g', 'h', 'i'],
...     ['j', 'k', 'l']
... ]
>>> colonne(matrice, 0)
['a', 'd', 'g', 'j']

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013sobcdufvg/ly napSr1me,(P2=:jtwki][h)050f0v0D0p0G0l0b0n0e0l0p0b0b0A010D0G0q010406050b0g0u0u0p0s0m040r0c0l0g0#0c0o050k0,0.0:0=0*0q040~1505180k181a150*0f0G0i0T0V0X0Z0J0G0j0J0l1o0J0D0(050O0d0l0v1j0W0Y011n1p1r1p0D1x1z1v0D0d0c0f0=1w0s160D0J0T0^0b0q0p0o0Z0z011B1l010h0Q0v0o0p0u0v1v1Z1#1*1D1-1z1:1=0(0a0n0y0s0c0q0c0b0G0{0o0n0M1X0s0s0v0e2a0~1^0o160k1V2n0D1T1S1U0f1`0Z1r0o1/271v1g1i0U1C2x0G2z0o1P1h1v0q2g162l2n2R0+1!2b2F1+2K0s0/0l0(0t2k2V0)2U1_2X1D2Z2#0(0z2)1#2n2O0v2n2D2q0f2u2w010e1P1?162}192P2,2m2@3b330M2Q2V310F0(0M0h3c3g2-1k1D0E0(0n3n3a310o0h0(330l0|2z3v2l310%040x3F3h2.0Z0o0(0/2r0G0e0v3L3p2G013I0w3n3u3G3N013P040C3W2W3q0Z3I0K0B3n060n3`3%3M3:013j042g0D0g0s0}0 2*3|3X1+3I0I3.3x3Q0p3S3U4e3)4c4k3~3+0G4n3Y3I0H4d472^3w3)3+3-4w3b3(3~4t3$4y3~400h0c0s4H4E3Y4p4O3}3Y0c3s042I4S4a2/0d0(0s1#0j3V4C3o3/4s0(3K4,4I4Q0(0J0p0`0v444r4b4:4~2/4g4i4+2T4P4 040K0K0H3^0~3e2{17390k372o2 0~2r2q1O1Q2q0p1y5g5j1h2+5j0N0P0R04.
Fonction transposition

La fonction transposition renvoie la matrice obtenue en transposant la matrice représentée par la liste de listes nommée matrice passée en paramètre.

Exemples
>>> matrice = [
...     [0, 1, 1, 1],
...     [1, 0, 1, 0],
...     [0, 0, 0, 1],
... ]
>>> transposition(matrice)
[[0, 1, 0], [1, 0, 0], [1, 1, 0], [1, 0, 1]]
>>> matrice = [
...     ['a', 'b', 'c'],
...     ['d', 'e', 'f'],
...     ['g', 'h', 'i'],
...     ['j', 'k', 'l']
... ]
>>> transposition(matrice)
[['a', 'd', 'g', 'j'], ['b', 'e', 'h', 'k'], ['c', 'f', 'i', 'l']]

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3Oo_;bcdufvgI/0lyq napSr1meh,(P2=:jtwki][R)é050j0C0L0w0O0r0b0u0i0r0w0b0b0I010L0O0x010406050b0k0B0B0w0z0s040y0e0r0k0.0e0v0u020w0B0x0g0u0R0C0{0z0t0k0C0b050p0^0`0|0~0?0x041m1t051w0p1w1y1t0?0j0O0m0$0(0*0,0D0O0n0D0r1M0D0L0;050X0h0r0C1H0)0+011L1N1P1N0L1V1X1T0L0h0e0j0~1U0z1u0L0D0$110b0x0w0v0,0H011Z1J010l0Z0C0v190C1T1~20251#281X2b0B2d040a0u0G0z0e0x0e0b0O14160V1|0z0z0C0i2y1m2f0v1u0p1`2K0L1^1@1_0j2h0,1P0v2a2v1T1E1G0%1!2U0O2W0v1;1F1T0x2D1u2I2K2=0@1 162$262+0z0{0r0;0A2H2_0=2^2g2{1#2}2 0;0H33202K2/0C2K2!2N0j2R2T010i1;2n0U1F1u3h2;343e2J053q0V3x371I1#0N0;0V0l3z3E2`3G0,0M0;0u3M363O2%010v0l0;2O201~2v2x0O153U2I3o0:040F3-2_3o0v0;0{2O0O0i0C3?3F3X3:0S0J3M060u483T3.380,3I042D0L0k0z0v3M4a3@4c013:0Q403W2|0;3q0r152W4s3/0;3=1n3y4b3P3Y3`0w3|3~4A4o3:0E4l3V3^0;0K4N4H434R4G3X4e0l0e0z4Z4n4H3_044V4E3f4m41260e3R042)4*4?390h0;0z200n3 4:3A4!263:4D2@57390;0(0z534i4W424C5j4u043{0z3}545b4+5k040S0S0P461m3C3i1v2:1m3k1m0L3m5I2P2L1:1=2N0w1W5D0p3k1s3N3o2D0B0f0l0w0N0C0f0D0c0;1e1g1i1k0u45553g351t0o0r0u1k0L0u0w0k0*0O0u2u635S0u2A0v00130Z0O0b0C0z0u1i6c2W0u6g0k1X0u4%0v2F3+165?1C3t2#4H1%1O1Q1S5X4o2j2a2c0;2p0y0i5q0x5 0G0s1`3,5@1x5F2@6W5C6G4H4e3K5m1#4_3T6W5c0,3Z3#510v3(2w2G6.5u585l6{4}6:3#5R6*0,435?2=47494S4o4-4k5@4=4t1#0e0;0I4|7h6:4 042k744p6~5t704I041V7s4Y5@79487b4,0;0x7m3o7j047l7f7F3X0v7p7r6 7n7t3;7s4-7z7U4B044r7#4o0B0O0;0q7A0;0P0S46497g4T7y0f7!2=7^4o7L7N7}7P6}7%7(7v7V7+7-7J4o4$4(8b7G4`8f3X4^0;4{7O6/3Y7p6?537/7X7)8g7e877$5y8i268d4)8n6|5d4.8B7i4_8m828o7R50525s4F8G757u8T7w4-7I8v5v8A7C7@833H0;4%8E8N8U7x4/8/7w8k4`8x347~4,8q8R8t5a8X7V8Z8t447?7@7a8o8D8J718h8F8@8L8`4;8*7o8Q0v8s8#84913f9k7x9i568:769798989t7Z7{739p1#4q7Y4U8t0P86927_0O9L9c01809S7Z9F8y4O0;9N9s8O8l9L9#9w8Y9K9G8V045z8(998:4e4g4i9v048|7Q3#9E0h5A0p6#5E5T5V1x040d160x0C130E5}3Z2)af6d1P6g6i0k6mal0L1Y2a1|1a0z0T0D2a2w155=1v352!3o6C1)1R2e8:6I2l2n6M6O0/6R6T0D6V2@3w3V2?3ya49a3J0C3L9.016,7Y3!7y6?6^3*aV9O9Z8u9Y8g7|a@4X0;969=7E9%049{9}4@7k9V7S2a909J7y9Xa}8$9zb68H8!8?7V9U9f93ba9{9t59bda|9$9x9!7s89047.a*3:7;bi9t9^0W9`9S4q9*6$9~bea1bEbza*4-9QbT9:bO9C9-a`5v9;bm3o9bbp9P9S8^8M8{9C8~9n8Sbx7wbubV0;bs8o43b)b=a$048-9Vb$c38:b:b5b?9m9ob%9qbdblbg848%785B3r3g5F5U3u0?5U0W0Y0!04.