
Quando si specifica un elemento o un intervallo con [] dell’array NumPy numpy.ndarray, è possibile utilizzare la costante incorporata di Python Ellissi (…).
Questo articolo descrive quanto segue:
- Ellissi costante incorporata in Python (…)
- Usando i puntini di sospensione (…) in NumPy
Se si desidera impostare se troncare o meno gli elementi durante la stampa di ndarray con print(), vedere il seguente articolo.
Il codice di esempio seguente è per Python3 (3.7.2). Nota che il comportamento potrebbe essere diverso in Python2.
Ellissi costante incorporata in Python (…)
In Python3, Ellipsis è definita come una costante incorporata.
print(Ellipsis)
# Ellipsis
I puntini di sospensione possono anche essere descritti come … (3 punti).
Ellissi e … sono lo stesso oggetto ellissi.
print(type(Ellipsis))
# <class 'ellipsis'>
print(type(...))
# <class 'ellipsis'>
print(Ellipsis is ...)
# True
A partire da Python 3.7.2, non c’è un uso particolare per Ellipsis (…) come grammatica di base di Python, ma come mostrato di seguito, NumPy ha un modo conveniente per usare Ellipsis (…).
Usando i puntini di sospensione (…) in NumPy
In NumPy, puoi usare Ellissi (…) per omettere le dimensioni intermedie quando specifici elementi o intervalli con [].
Prendi come esempio il seguente array quadridimensionale.
import numpy as np
a = np.arange(120).reshape(2, 3, 4, 5)
print(a.shape)
# (2, 3, 4, 5)
Ad esempio, se si desidera specificare solo l’ultima dimensione, è possibile utilizzare :.
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]]]
Con …, puoi scrivere:
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]]]
Lo stesso vale quando si desidera specificare solo la prima e l’ultima dimensione. Puoi omettere la dimensione nel mezzo con ….
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]]
Puoi usare Ellipsis invece di ….
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]]
Con ::, il numero di : deve essere abbinato al numero di dimensioni, ma non devi preoccuparti perché ….
Se ce ne sono due o più…, non è chiaro dove omettere, quindi viene generato un errore.
# print(a[..., 0, ...])
# IndexError: an index can only have a single ellipsis ('...')
Se : viene fino all’ultima dimensione, può essere omesso. Non c’è bisogno di scrivere….
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]]
