
È possibile utilizzare numpy.squeeze() per rimuovere tutte le dimensioni di dimensione 1 dall’array NumPy ndarray. squeeze() viene fornito anche come metodo di ndarray.
In questo articolo vengono descritti i seguenti contenuti.
- Utilizzo di base di numpy.squeeze()
- Specifica la dimensione da eliminare:
axis
- numpy.ndarray.squeeze()
Usa numpy.reshape() per aggiungere in qualsiasi forma e numpy.newaxis, numpy.expand_dims() per aggiungere una nuova dimensione di articolo dimensione 1. Vedere il seguente articolo per i dettagli.
Utilizzo di base di numpy.squeeze()
Specificando numpy.ndarray come primo argomento di numpy.squeeze() si richiede numpy.ndarray con tutte le dimensioni di dimensione 1 rimosse.
import numpy as np
a = np.arange(6).reshape(1, 2, 1, 3, 1)
print(a)
# [[[[[0]
# [1]
# [2]]]
#
#
# [[[3]
# [4]
# [5]]]]]
print(a.shape)
# (1, 2, 1, 3, 1)
a_s = np.squeeze(a)
print(a_s)
# [[0 1 2]
# [3 4 5]]
print(a_s.shape)
# (2, 3)
numpy.squeeze() restituisce una vista dell’originale numpy.ndarray. L’oggetto originale e l’oggetto di visualizzazione condivide la memoria, quindi la modifica di un elemento cambia l’altro.
print(np.shares_memory(a, a_s))
# True
Se vuoi fare una copia, usa copy().
a_s_copy = np.squeeze(a).copy()
print(np.shares_memory(a, a_s_copy))
# False
Vedere il seguente articolo per recensioni e copie in NumPy.
Specifica la dimensione da eliminare:axis
Per impostazione predefinita, tutte le dimensioni con dimensione 1 vengono rimosse, come nell’esempio sopra.
È possibile specificare l’indice della dimensione da rimuovere nel secondo asse degli argomenti di numpy.squeeze(). Le dimensioni che non sono l’indice specificato non vengono rimosse.
print(a.shape)
# (1, 2, 1, 3, 1)
print(np.squeeze(a, 0))
# [[[[0]
# [1]
# [2]]]
#
#
# [[[3]
# [4]
# [5]]]]
print(np.squeeze(a, 0).shape)
# (2, 1, 3, 1)
Si verificherà un errore se si specifica una dimensione la cui dimensione non è 1 o una dimensione che non esiste.
# print(np.squeeze(a, 1))
# ValueError: cannot select an axis to squeeze out which has size not equal to one
# print(np.squeeze(a, 5))
# AxisError: axis 5 is out of bounds for array of dimension 5
l’asse può anche essere specificato come valore negativo. -1 corrisponde all’ultima dimensione e può essere specificato dalla posizione dal retro.
print(np.squeeze(a, -1))
# [[[[0 1 2]]
#
# [[3 4 5]]]]
print(np.squeeze(a, -1).shape)
# (1, 2, 1, 3)
print(np.squeeze(a, -3))
# [[[[0]
# [1]
# [2]]
#
# [[3]
# [4]
# [5]]]]
print(np.squeeze(a, -3).shape)
# (1, 2, 3, 1)
È possibile specificare più dimensioni con tupla. Si verifica un errore se viene inclusa una dimensione la cui dimensione non è 1 o non esiste.
print(np.squeeze(a, (0, -1)))
# [[[0 1 2]]
#
# [[3 4 5]]]
print(np.squeeze(a, (0, -1)).shape)
# (2, 1, 3)
# print(np.squeeze(a, (0, 1)))
# ValueError: cannot select an axis to squeeze out which has size not equal to one
numpy.ndarray.squeeze()
squeeze() viene fornito anche come metodo di numpy.ndarray.
L’utilizzo è lo stesso di numpy.squeeze(). Il primo argomento è asse.
print(a.squeeze())
# [[0 1 2]
# [3 4 5]]
print(a.squeeze().shape)
# (2, 3)
print(a.squeeze((0, -1)))
# [[[0 1 2]]
#
# [[3 4 5]]]
print(a.squeeze((0, -1)).shape)
# (2, 1, 3)
Il metodo squeeze() contiene anche una vista come numpy.squeeze(). L’oggetto originale rimane lo stesso.
a_s = a.squeeze()
print(a_s)
# [[0 1 2]
# [3 4 5]]
print(np.shares_memory(a, a_s))
# True
print(a)
# [[[[[0]
# [1]
# [2]]]
#
#
# [[[3]
# [4]
# [5]]]]]