HOWTO · NumPy
Funzione numpy.random.permutation() in NumPy
La funzione numpy.random.permutation() restituisce una copia permutata in modo casuale di un array, o un intervallo permutato di interi quando le viene passato un intero, e lascia i dati originali invariati — a differenza di numpy.random.shuffle(), che mescola l'array sul posto.
In questa pagina
numpy.random.permutation() permuta in modo casuale una sequenza, oppure restituisce un intervallo permutato. Passagli un array e restituisce una copia mescolata di quell’array — l’originale resta esattamente com’era. Passagli un intero n e restituisce gli interi da 0 a n - 1 in ordine casuale. Questo comportamento di copiare invece di modificare è tutta la differenza rispetto a numpy.random.shuffle(), che mescola un array sul posto.
Permutare un array senza modificare l’originale
Con un array, permutation() costruisce un nuovo array che contiene gli stessi elementi in ordine casuale:
import numpy as np
original_array = np.array([1, 2, 3, 4, 5])
shuffled_array = np.random.permutation(original_array)
print("Original Array:", original_array)
print("Shuffled Array:", shuffled_array)
Output:
Original Array: [1 2 3 4 5]
Shuffled Array: [3 1 5 2 4]
L’ordine in shuffled_array è casuale, quindi l’output sopra è un risultato possibile, non ciò che ogni esecuzione produce. Ciò che non varia è original_array: contiene ancora [1 2 3 4 5], il che rende permutation() la scelta giusta quando l’ordine originale conta ancora in seguito — ad esempio, quando un set di dati deve rimanere allineato con le sue etichette.
Con un intero, permutation() restituisce un intervallo permutato, che è un modo comodo per ottenere indici casuali:
import numpy as np
n = 5
permuted_indices = np.random.permutation(n)
print("Permuted Indices:", permuted_indices)
Output:
Permuted Indices: [4 0 2 3 1]
Anche qui, l’ordine esatto differisce da un’esecuzione all’altra. Passare un intero equivale a costruire prima l’intervallo con np.arange(n) e permutare quell’array.
Confrontare permutation() e shuffle()
Le due funzioni differiscono per ciò che restituiscono e per ciò che fanno ai tuoi dati. permutation() restituisce un nuovo array e non tocca mai il suo input. numpy.random.shuffle() non restituisce nulla e riordina l’array stesso, sul posto:
import numpy as np
original_array = np.array([1, 2, 3, 4, 5])
np.random.shuffle(original_array)
print("Shuffled Original Array:", original_array)
Output:
Shuffled Original Array: [2 5 1 4 3]
Dopo questa chiamata, l’ordine originale è perso. Scegli shuffle() quando non ti serve e vuoi riordinare sul posto; scegli permutation() quando l’originale deve sopravvivere. Una conseguenza pratica della copia: su un set di dati grande, permutation() ha bisogno di memoria per il secondo array, quindi valuta questa comodità rispetto alla memoria aggiuntiva quando i dati sono grandi.