Sur numpy.ndarray.reshape
le shape
est un paramètre int ou tuple d'ints y
La nouvelle forme doit être compatible avec la forme originale. Si un entier, alors le résultat sera un tableau 1-D de cette longueur.
La signature de la documentation est juste :
# Note this question doesn't apply to the function version, `np.reshape`
np.ndarray.reshape(shape, order='C')
Dans la pratique, la spécification ne semble pas être aussi stricte. D'après la description ci-dessus, je m'attendrais à devoir utiliser :
import numpy as np
a = np.arange(12)
b = a.reshape((4,3)) # (4,3) is passed to `newshape`
Mais à la place, je peux m'en sortir avec juste :
c = a.reshape(4,3) # Seems like just 4 would be passed to `newshape`
# and 3 would be passed to next parameter, `order`
print(np.array_equal(b,c))
# True
Comment est-ce que je peux faire ça ? Je sais que si j'entre simplement 2, 3
dans un shell Python, c'est techniquement un tuple, que j'utilise des parenthèses ou non. Mais la comparaison ci-dessus semble violer les lois de base sur la façon dont les paramètres positionnels sont passés au dict des mots-clés args. C'est à dire :
def f(a, b=1, order='c'):
print(a)
print(b)
f((4,3))
print()
f(4,3)
# (4, 3)
# 1
#
# 4
# 3
...et il n'y a pas d'opérateurs en étoile en reshape
. (Quelque chose de semblable à def f(*a, order='c')
ci-dessus).