Bonjour,
Voici un bout de code et son résultat :
1 2 3 4 5 6 7 8 9 10 11
| import numpy as np
x = np.random.rand(5)
print(x)
print(type(x))
print(x.shape)
x = np.random.rand(1, 5)
print(x)
print(type(x))
print(x.shape) |
[0.60750665 0.90682901 0.71761544 0.76073789 0.46655106]
<class 'numpy.ndarray'>
(5,)
[[0.04000783 0.71784235 0.946608 0.77873071 0.82963164]]
<class 'numpy.ndarray'>
(1, 5)
J'ai un peu du mal à comprendre la subtile nuance entre les 2. Pouvez-vous m'éclaire ?
Je ne sais pas trop comment nommer les choses pour faire une recherche intelligente sur le net.
J'ai l'impression que le premier ndarray est un vecteur, au sens strict. Il n'est pas question de ligne ou de colonne. J'ai cette impression car sa transposée est égale à lui-même :
x = np.random.rand(10)
x.shape
Out[6]: (10,)
x.T.shape
Out[7]: (10,)
Le second ndarray est vraiment une matrice 2 dimensions. Ici, sa première dimension est de taille 1 donc c'est un vecteur ligne. Sa transposée donne bien un vecteur colonne :
x = np.random.rand(1, 10)
x.shape
Out[9]: (1, 10)
x.T.shape
Out[10]: (10, 1)
Est-ce correct ? Peut-on passer un <class 'numpy.ndarray'> de forme (5,) là où un (1, 5) est attendu ? J'ai fait cette expérience dans un code tiré d'un tuto et ça a fonctionné : le code original avait un (1, n) et je lui ai passé un (n,) sans soucis.
Partager