Python NumPy Shift Array

Muhammad Maisam Abbas 30 gennaio 2023
  1. NumPy Shift Array con il metodo np.roll()
  2. NumPy Shift Array con il metodo Slicing in Python
  3. NumPy Shift Array con funzione shift() all’interno della libreria scipy.ndimage.interpolation in Python
Python NumPy Shift Array

Questo tutorial introdurrà i metodi per spostare un array NumPy.

NumPy Shift Array con il metodo np.roll()

Se vogliamo spostare a destra oa sinistra gli elementi di un array NumPy, possiamo usare il metodo numpy.roll() in Python. Il metodo numpy.roll() viene utilizzato per far rotolare gli elementi dell’array lungo un asse specificato. Prende l’array e il numero di posti in cui vogliamo spostare gli elementi dell’array e restituisce l’array spostato. Se vogliamo spostare gli elementi verso destra, dobbiamo usare un numero intero positivo come valore di spostamento. Se vogliamo spostare gli elementi verso sinistra, dobbiamo specificare un valore di spostamento negativo. Il seguente esempio di codice mostra come spostare gli elementi di un array con il metodo numpy.roll().

import numpy as np

array = np.array([1, 2, 3, 4, 5])

array_new = np.roll(array, 3)
print(array_new)

Produzione:

[3 4 5 1 2]

Per prima cosa abbiamo creato l’array con la funzione np.array(). Abbiamo quindi spostato gli elementi verso destra con la funzione np.roll() e archiviato l’array risultante all’interno di array_new.

NumPy Shift Array con il metodo Slicing in Python

Se vogliamo spostare gli elementi verso destra o verso sinistra e sostituire gli indici spostati con un valore costante, dobbiamo usare il metodo di affettatura dell’array in Python. Possiamo creare un nuovo array vuoto proprio come il nostro array originale. Se il valore di spostamento è positivo, riempiamo il lato sinistro dell’array con il valore costante e se il valore di spostamento è negativo, riempiamo il lato destro dell’array con il valore costante. Possiamo quindi riempire gli indici rimanenti del nostro nuovo array con i valori dell’array originale. L’esempio di codice seguente mostra come spostare gli elementi di una matrice con il metodo di suddivisione della matrice.

import numpy as np

array = np.array([1, 2, 3, 4, 5])
num = -3
fill_value = 0


def shift(arr, num, fill_value):
    result = np.empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr
    print(result)


shift(array, num, fill_value)

Produzione:

[4 5 0 0 0]

Abbiamo definito la funzione shift() che sposta gli elementi del nostro array di tre posizioni verso sinistra utilizzando il metodo di suddivisione dell’array nel codice precedente. Per prima cosa abbiamo creato il nostro array originale con il metodo np.array(). Abbiamo quindi specificato il numero di indici num con cui vogliamo spostare i nostri elementi dell’array e il valore costante fill_value con cui vogliamo sostituire tutti gli indici spostati. Alla fine, abbiamo passato questi valori alla funzione shift() che crea un nuovo array result come il nostro array originale con la funzione np.empty_like(arr), memorizza gli elementi spostati e stampa l’array spostato.

NumPy Shift Array con funzione shift() all’interno della libreria scipy.ndimage.interpolation in Python

Il metodo shift() all’interno della libreria scipy.ndimage.interpolation viene utilizzato per spostare l’array utilizzando il metodo di interpolazione spline in Python. A differenza del metodo numpy.roll(), il metodo shift() può spostare l’array e sostituire contemporaneamente gli indici spostati con un valore costante specificato. La funzione shift() prende l’array originale, il numero di indici che vogliamo spostare e il valore costante che vogliamo sostituire con gli indici spostati come parametri di input e restituisce l’array spostato in cui ogni indice spostato viene sostituito con il valore specificato valore costante. Il seguente esempio di codice ci mostra come spostare gli elementi di un array con la funzione shift().

import numpy as np
from scipy.ndimage.interpolation import shift

array = np.array([1, 2, 3, 4, 5])

result = shift(array, 3, cval=0)
print(result)

Produzione:

[0 0 0 1 2]

Abbiamo spostato gli elementi di array di tre posti verso destra e abbiamo sostituito gli indici spostati con 0 usando la funzione shift() nel codice sopra. Per prima cosa abbiamo creato il nostro array con la funzione np.array(). Abbiamo quindi utilizzato la funzione shift per spostare l’array a destra di 3 posizioni e sostituire i primi tre indici dell’array originale con il valore costante 0. Abbiamo memorizzato l’output della funzione shift() all’interno dell’array result. Alla fine, abbiamo stampato i valori all’interno dell’array result.

Tutti questi metodi funzionano bene. Se vogliamo solo spostare i valori all’interno dell’array e non vogliamo sostituire gli indici spostati con un valore costante, dovremmo usare la funzione numpy.roll(). D’altra parte, se vogliamo sostituire gli indici spostati con un valore costante specifico, il metodo di affettatura dell’array è il metodo più veloce per questa operazione. Il metodo di suddivisione dell’array è più veloce, ma è un po’ più complicato rispetto all’utilizzo della funzione shift() nella libreria scipy. Se non ci interessano le prestazioni del nostro codice, possiamo usare la funzione shift() per questo compito.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Articolo correlato - NumPy Array