Pourquoi est-ce que je ne peux pas obtenir la transposition de l'alpha alors que je peux l'obtenir pour la version bêta? À quoi servent les [] supplémentaires?
alpha = np.array([1,2,3,4]) alpha.shape alpha.T.shape beta = np.array([[1,2,3,4]]) beta.shape beta.T.shape
5 Réponses :
alpha est un tableau 1D, la transposition est elle-même.
beta est un tableau 2D, vous pouvez donc transformer (1, n) à (n,1).
Pour faire de même avec alpha , vous devez ajouter une dimension, vous n'avez pas besoin pour le transposer:
alpha[:, None]
alpha est un tableau 1D avec la forme (4,). La transposition est à nouveau simplement alpha , c'est-à-dire alpha == alpha.T .
beta est un tableau 2D de forme (1,4). Il s'agit d'une seule ligne, mais elle a deux dimensions. Sa transposition ressemble à une seule colonne de forme (4,1).
De la documentation ( lien a>):
La transposition d'un tableau 1D renvoie une vue inchangée du tableau d'origine.
Le tableau [1,2,3,4] est 1-D tandis que le tableau [[1,2,3,4]] est un 1x4 2 -D tableau.
La deuxième paire de crochets indique qu'il s'agit d'un tableau 2D, donc avec tel et tableau le tableau transposé est différent du premier tableau (puisque la transposition change les 2 dimensions). Cependant, si le tableau est seulement 1D, la transposition ne change rien et le tableau résultant est égal au tableau de départ.
Quand je suis arrivé dans le monde des langages de programmation, étant venu du "côté mathématique de l'entreprise", cela m'a également semblé étrange. Après y avoir réfléchi, j'ai réalisé que du point de vue de la programmation, ils sont différents. Jetez un œil à la liste suivante:
c = [ [ 100, 200, 300, 400, 500] ]
Ceci est une structure 1D. Il en est ainsi, car pour récupérer les valeurs 1, 2, 3, 4 et 5, il vous suffit d'attribuer une valeur d'adresse. 3 serait renvoyé si vous exécutiez la commande a [2] par exemple.
Jetez maintenant un œil à cette liste:
b = [[ 1, 2, 3, 4, 5],
[11, 22, 33, 44, 55]]
Pour récupérer le 11 par exemple, vous auriez besoin de deux numéros de position, 1 parce que 11 est situé dans la deuxième liste et 0 parce que dans la deuxième liste, il est situé en première position. En d'autres termes, b [1,0] vous rend 11.
Maintenant vient la partie astuce. Regardez cette troisième liste:
a = [1,2,3,4,5]
Si vous regardez attentivement chaque numéro nécessite 2 numéros de position pour être repris de la liste. 300 par exemple nécessite 0 car il se trouve dans la première (et seule) liste et 2 car c'est le troisième élément de la première liste. c [0,2] vous renvoie 300.
Cette liste peut être transposée car elle a deux dimensions et l'opération de transposition est quelque chose qui change les arguments de position. Donc c.T vous donnerait une liste dont la forme serait [5,1], puisque c a une forme [1,5].
Revenez à la liste a. Là, vous avez une liste avec un seul numéro de position. Cette liste a uniquement la forme [5], donc il n'y a pas de second argument de position pour l'opération de transposition avec laquelle travailler. Par conséquent, il reste [5] et si vous essayez aT vous obtenez un.
Compris?
Meilleures salutations,
Gustavo,
Le [] ajoute une dimension. Transpose ne le fait pas.