
Lorsque vous spécifiez un élément ou une plage avec [] du tableau NumPy numpy.ndarray, vous pouvez utiliser la constante intégrée Python Ellipsis (…).
Cet article décrit les éléments suivants :
- Ellipse constante intégrée Python (…)
- Utiliser des points de suspension (…) dans NumPy
Si vous souhaitez définir si vous souhaitez ou non tronquer les éléments lors de l’impression de ndarray avec print(), consultez l’article suivant.
L’exemple de code ci-dessous est pour Python3 (3.7.2). Notez que le comportement peut être différent en Python2.
Ellipse constante intégrée Python (…)
En Python3, Ellipsis est défini comme une constante intégrée.
print(Ellipsis)
# Ellipsis
L’ellipse peut également être décrite comme … (3 points).
Ellipsis et … sont le même objet ellipse.
print(type(Ellipsis))
# <class 'ellipsis'>
print(type(...))
# <class 'ellipsis'>
print(Ellipsis is ...)
# True
Depuis Python 3.7.2, il n’y a pas d’utilisation particulière pour Ellipsis (…) en tant que grammaire de base de Python, mais comme indiqué ci-dessous, NumPy a un moyen pratique d’utiliser Ellipsis (…).
Utiliser des points de suspension (…) dans NumPy
Dans NumPy, vous pouvez utiliser Ellipsis (…) pour omettre les dimensions intermédiaires lors de la spécification d’éléments ou de plages avec [].
Prenons le tableau à quatre dimensions suivant comme exemple.
import numpy as np
a = np.arange(120).reshape(2, 3, 4, 5)
print(a.shape)
# (2, 3, 4, 5)
Par exemple, si vous souhaitez spécifier uniquement la dernière dimension, vous pouvez utiliser :.
print(a[:, :, :, 0])
# [[[ 0 5 10 15]
# [ 20 25 30 35]
# [ 40 45 50 55]]
#
# [[ 60 65 70 75]
# [ 80 85 90 95]
# [100 105 110 115]]]
Avec …, vous pouvez écrire :
print(a[..., 0])
# [[[ 0 5 10 15]
# [ 20 25 30 35]
# [ 40 45 50 55]]
#
# [[ 60 65 70 75]
# [ 80 85 90 95]
# [100 105 110 115]]]
Il en va de même lorsque vous souhaitez spécifier uniquement la première et la dernière dimensions. Vous pouvez omettre la cote du milieu avec ….
print(a[0, :, :, 0])
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
print(a[0, ..., 0])
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
Vous pouvez utiliser Ellipsis au lieu de ….
print(a[Ellipsis, 0])
# [[[ 0 5 10 15]
# [ 20 25 30 35]
# [ 40 45 50 55]]
#
# [[ 60 65 70 75]
# [ 80 85 90 95]
# [100 105 110 115]]]
print(a[0, Ellipsis, 0])
# [[ 0 5 10 15]
# [20 25 30 35]
# [40 45 50 55]]
Avec :, le nombre de : doit correspondre au nombre de dimensions, mais vous n’avez pas à vous en soucier car ….
S’il y en a deux ou plus …, on ne sait pas où omettre, donc une erreur est générée.
# print(a[..., 0, ...])
# IndexError: an index can only have a single ellipsis ('...')
Si : est répété jusqu’à la dernière dimension, : peut être omis. Il n’y a pas besoin d’écrire….
print(a[0, 0, :, :])
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]
print(a[0, 0])
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]
print(a[0, 0, ...])
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]
# [15 16 17 18 19]]